如何使用位域将数据从二进制文件复制到结构中?

时间:2018-10-12 15:59:18

标签: c++ binary bit-fields

我有一个要从中提取数据的二进制文件。文件中的最后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,我认为这是错误的数据。

您如何正确读取数据?

1 个答案:

答案 0 :(得分:1)

您不能使用位域值的地址,因为它可能没有字节对齐。您应该直接复制到a.x(而不是a.x.value)中。

此外,您实际上并不需要一个单独的位域结构。您只需将位域直接放入Data结构中即可。

有关如何使用位域的信息,请参见:https://www.geeksforgeeks.org/bit-fields-c/