我有一个要从中提取数据的二进制文件。文件中的最后5个数据点是10位整数类型,我在如何提取该信息并将其转换为可读的内容方面感到吃力。我尝试了以下代码:
struct bitField
{
unsigned value: 10;
};
struct Data
{
bitField x;
}
int main()
{
std::array<char,696> buffer;
std::ifstream file ("file.bin", std::ios::in | std::ios::binary);
file.read(buffer.data(),buffer.size());
Data a;
std::memcpy(&a.x.value,&buffer[612],sizeof(struct bitField));
}
然后我遇到错误attempt to take address of bit-field
。然后,我尝试使用std::bitset<10>
代替Data结构中的bitField。而且虽然我没有遇到编译器错误,但我却得到了一堆0,我认为这是错误的数据。
您如何正确读取数据?
答案 0 :(得分:1)
您不能使用位域值的地址,因为它可能没有字节对齐。您应该直接复制到a.x(而不是a.x.value)中。
此外,您实际上并不需要一个单独的位域结构。您只需将位域直接放入Data结构中即可。
有关如何使用位域的信息,请参见:https://www.geeksforgeeks.org/bit-fields-c/