C - 表示结构的位的操作

qiu*_*bit 3 c hash bit-manipulation

我正在尝试在C中编写hashset,并且我发现了一个哈希函数,它根据数据中的位进行哈希处理.我有以下结构:

struct triple
{
    int a;
    int b;
    int c;
};
Run Code Online (Sandbox Code Playgroud)

问题是 - 如何从类型的对象获取位表示struct triple?假设我想用8位整数对其位进行异或.我该怎么办?

Ark*_*kku 5

迭代地对每个字节struct和XOR进行迭代,例如,

void bytexor(unsigned char xor_byte, void *data, size_t size) {
    unsigned char *p = data;
    while (size--) {
        *p++ ^= xor_byte;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法是:

struct triple my_struct;
// ...
bytexor(0xFF, &my_struct, sizeof my_struct);
Run Code Online (Sandbox Code Playgroud)

(注意:这回答了如何struct使用字节进行异或的问题.至于基于此实现一般的散列函数,它可能不是特别好的主意,因为struct可能有填充,即具有潜在不确定性的额外字节与实际有效载荷字段的值无关的值.)