我有需要使用 SHA256 散列的对象。该对象有如下几个字段:
class Foo {
// some methods
protected:
std::array<32,int> x;
char y[32];
long z;
}
有没有一种方法可以像访问结构一样直接访问代表内存中 3 个成员变量的字节?这些散列需要尽快计算,所以我想避免 malloc'ing 一组新的字节并复制到堆分配的数组。还是简单地将结构嵌入到类中?
重要的是我要获得这些变量的精确二进制表示,以便 SHA256 在 3 个变量相等的情况下完全相同(因此我不能在哈希函数中包含任何额外的填充字节等) )
最佳答案
大多数哈希类能够在返回哈希之前获取多个区域,例如如:
class Hash {
public:
void update(const void *data, size_t size) = 0;
std::vector<uint8_t> digest() = 0;
}
因此您的散列方法可能如下所示:
std::vector<uint8_t> Foo::hash(Hash *hash) const {
hash->update(&x, sizeof(x));
hash->update(&y, sizeof(y));
hash->update(&z, sizeof(z));
return hash->digest();
}
关于c++ - 获取 C++ 类的字节表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70037105/