c++ - 如何使用位域将数据从二进制文件复制到结构中?
问题描述
我有一个试图从中提取数据的二进制文件。文件中的最后 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,而我认为这是不正确的数据。
您如何正确读取数据?
解决方案
您不能获取位域值的地址,因为它可能不是字节对齐的。您应该直接复制到 ax (不是 axvalue)。
此外,您实际上并不需要单独的位域结构。您可以简单地将位域直接放入 Data 结构中。
请参阅如何使用位域: https ://www.geeksforgeeks.org/bit-fields-c/
推荐阅读
- javascript - 使用签名和策略返回正文的 Google 应用脚本将图像上传到 Amazon S3 格式不正确 multipart/form-data
- angular - FormControl.Validators.pattern 无法正常工作,而具有相同字符串的正则表达式显示数据匹配
- javascript - 子元素导致父 onmousemove 事件侦听器出现问题
- reactjs - 如何阻止 useEffect 一遍又一遍地重复
- pine-script - TradingView(Pine Script)回测期货(商品)数据的“无数据”?比如银、金……?
- pip - 如何为所有 python 依赖项指定存储库?
- django - 从相关表中获取字段/列并过滤它
- javascript - Javascript Regex 提取国际电话号码
- authentication - 使用访问令牌从 Google 获取用户个人资料详细信息
- java - 在Java中按条件返回