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

C++ 如何使用位字段将数据从二进制文件复制到结构中?,c++,binary,bit-fields,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::i

我有一个二进制文件,我正试图从中提取数据。文件中最后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));

}
然后,尝试获取位字段的地址时遇到错误。然后,我尝试在数据结构中使用std::bitset代替bitField。虽然我没有得到一个编译器错误,但是我得到了一堆0,我相信这是不正确的数据


如何正确读入数据?

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

此外,实际上不需要有单独的位字段结构。您可以简单地将位字段直接放入数据结构中


参见如何使用位字段:

我建议使用C++引用EG而不是C语言,而不是在这种情况下很重要。