如何使用位字段将数据从二进制文件复制到结构中?
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(中。
此外,您实际上不需要单独的位域结构。 您可以简单地将位字段直接放入数据结构中。
请参阅有关如何使用位域的信息:https://www.geeksforgeeks.org/bit-fields-c/
相关文章:
- 在一个微不足道的可复制结构中,移动语义应该实现吗?
- 复制结构 tm
- 复制结构时,system.AccessVioLationException
- C++:是否隐式复制结构
- 复制结构的一部分
- 在不使用 std::copy 函数的情况下编写这个复杂的复制结构体
- memcpy 问题 -> 尝试复制结构数组
- 使用declard和参数转发构造函数隐式复制结构
- 如何复制结构数组
- 如何复制结构数组
- C++ 不带指针的复制结构
- 添加到矢量而不复制结构数据
- 从 std::vector 中删除复制结构成员
- 仅在发布版本中出错,从 std::vector 复制结构
- 引用或复制结构的结构(已分配的memset)是一件有效的事情
- 深度复制结构C++
- 如何从指向void的指针复制结构体
- 在新版本的 gcc 上返回隐式不可复制结构的 std::map 时出现编译错误
- C/C++是如何复制结构的
- c++内存复制结构体到字节数组中