首页 > 解决方案 > 如何使用位域将数据从二进制文件复制到结构中?

问题描述

我有一个试图从中提取数据的二进制文件。文件中的最后 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>在我的数据结构中使用 bitField 来代替。虽然我没有收到编译器错误,但我得到了一堆 0,而我认为这是不正确的数据。

您如何正确读取数据?

标签: c++binarybit-fields

解决方案


您不能获取位域值的地址,因为它可能不是字节对齐的。您应该直接复制到 ax (不是 axvalue)。

此外,您实际上并不需要单独的位域结构。您可以简单地将位域直接放入 Data 结构中。

请参阅如何使用位域: https ://www.geeksforgeeks.org/bit-fields-c/


推荐阅读