C - 对表示结构的位的操作
C - operations on bits representing a structure
我正在尝试用 C 语言编写 hashset,我找到了一个哈希函数,它根据数据中的位进行哈希。我有以下结构:
struct triple
{
int a;
int b;
int c;
};
问题是 - 如何从 struct triple
类型的对象中获取位表示?假设我想用 8 位整数对其位进行异或。我该怎么做?
遍历 struct
的所有字节并分别对每个字节进行 XOR,例如,
void bytexor(unsigned char xor_byte, void *data, size_t size) {
unsigned char *p = data;
while (size--) {
*p++ ^= xor_byte;
}
}
用法为:
struct triple my_struct;
// ...
bytexor(0xFF, &my_struct, sizeof my_struct);
(注意:这回答了如何将struct
与字节异或的问题。至于基于此实现通用哈希函数,这可能不是一个特别好的主意,因为struct
可能有填充,即具有与实际有效载荷字段的值无关的潜在不确定值的额外字节。)
我正在尝试用 C 语言编写 hashset,我找到了一个哈希函数,它根据数据中的位进行哈希。我有以下结构:
struct triple
{
int a;
int b;
int c;
};
问题是 - 如何从 struct triple
类型的对象中获取位表示?假设我想用 8 位整数对其位进行异或。我该怎么做?
遍历 struct
的所有字节并分别对每个字节进行 XOR,例如,
void bytexor(unsigned char xor_byte, void *data, size_t size) {
unsigned char *p = data;
while (size--) {
*p++ ^= xor_byte;
}
}
用法为:
struct triple my_struct;
// ...
bytexor(0xFF, &my_struct, sizeof my_struct);
(注意:这回答了如何将struct
与字节异或的问题。至于基于此实现通用哈希函数,这可能不是一个特别好的主意,因为struct
可能有填充,即具有与实际有效载荷字段的值无关的潜在不确定值的额外字节。)