c++ - 获取 C++ 类的字节表示

标签 c++ hash

我有需要使用 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/

相关文章:

hash - Ansible 创建 sha512-pbkdf2 哈希

c++ - 将 %APPDATA% 与 CreateProcessW 一起使用

c++ - 我可以在启动程序时从命令行重定向额外的文件描述符吗?

javascript - 如何在JavaScript中获取 session ID

javascript - 捕获删除哈希

javascript - 如何加载页面而不重新加载它?

ruby-on-rails - 在 Ruby 中初始化实例时使用哈希作为参数会发生什么?

c++ - 带有模板的 shared_ptr

c++ - 使用 Visual Studio 2008 从 x86 编译 x64 dll

c++ - C/C++ 中的算法速度测试器