如何使用位字段将数据从二进制文件复制到结构中?
How to use bit-fields in order to copy data into a struct from a binary?
我有一个二进制文件,我正试图从中提取数据。文件中的最后 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,我认为这是不正确的数据。
如何正确读入数据?
您不能获取位域值的地址,因为它可能不是字节对齐的。您应该直接复制到 a.x(而不是 a.x.value)。
此外,您实际上并不需要有一个单独的位域结构。您可以简单地将位域直接放入数据结构中。
我有一个二进制文件,我正试图从中提取数据。文件中的最后 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,我认为这是不正确的数据。
如何正确读入数据?
您不能获取位域值的地址,因为它可能不是字节对齐的。您应该直接复制到 a.x(而不是 a.x.value)。
此外,您实际上并不需要有一个单独的位域结构。您可以简单地将位域直接放入数据结构中。