【发布时间】:2014-04-23 19:42:49
【问题描述】:
我在我的软件中做了很多位向量操作。例如:假设我需要存储关于候选人“n”的布尔信息,我执行以下操作:
uint64_t *information_vector;
uint32_t pos = n / 64;
uint32_t bit_pos = n % 64;
information_vector[pos] |= (1 << bit_pos);
我在阅读该信息时遵循类似的程序:
uint32_t pos = n / 64;
uint32_t bit_pos = n % 64;
if (information_vector[pos] & (1 << bit_pos)) {
// do something
}
同时,我还将information_vector写入磁盘并再次读取。现在,我正在尝试解决一个让我做噩梦的错误,让我觉得 Endianess 可能是这里的罪魁祸首,但我无法解释。有什么办法可以查吗?这种位向量操作通常是字节序安全且跨架构的吗?
我还看到,在代码的某处,我在另一个位向量中为同一候选者设置了一些其他信息:
uint8_t byte_position = n / 8;
uint8_t bit_position = n % 8;
another_information_vector[byte_position] |= (1 << bit_position);
我通常通过对这些位向量进行与运算来找到一组共同的属性。
【问题讨论】:
-
它是安全的,除非您已将其编译为一个字节序并部署在另一个字节序上
标签: c bit-manipulation endianness bitvector