繁体   English   中英

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

How to use bit-fields in order to copy data into a struct from a binary?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个试图从中提取数据的二进制文件。 文件中的最后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的错误attempt to take address of bit-field 然后,我已经尝试使用std::bitset<10>代替位域在我的数据结构。 虽然我没有遇到编译器错误,但我还是得到了一堆0,我认为这是不正确的数据。

您如何正确读取数据?

1 个回复

您不能使用位字段值的地址,因为它可能没有字节对齐。 您应该直接复制到ax(而不是axvalue)中。

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

有关如何使用位域的信息,请参见: https//www.geeksforgeeks.org/bit-fields-c/

1 为什么我不能执行复制到容器中的二进制文件?

我有一个从基本图像alpine:3.11构建的容器 现在我有一个二进制文件my_bin ,我将它复制到正在运行的容器中。 从正在运行的容器中,我移至 /usr/local/bin 并确认该二进制文件具有正确的权限。 例如 但是当我尝试执行/运行这个二进制文件时,我得到以下信息: 如果我切换到 ...

5 复制到矩阵的二进制文件行

我想将矩阵的每一行写入二进制文件。 我尝试这样写: ... 但它不起作用,我得到垃圾数字。 任何帮助,赞赏, 特德。 ...

2011-01-11 23:18:36 2 199   c++
6 将二进制文件复制到实例

使用Heat如何将二进制文件复制到实例? 对于常规的txt文件(例如名为“new.txt”的文本文件),我可以使用 - 但同样的事情对二进制文件不起作用。 在二进制文件的情况下,在实例创建之后,我可以看到创建了与二进制文件同名的文件,但内容不同。 实例中新生成的文件不是二进制文件 ...

9 从二进制文件读取并复制到数组

它的时间过去了,但是无论如何我都想解决这个问题。 我想读取二进制文件以缓冲,后来我想将此缓冲复制到数组。 我就是那样 我在strcpy行出现错误,无法将指针复制到类似这样的整数。 谢谢。 ...

10 将列表复制到二进制文件

我正在尝试将列表中的结构内容复制到二进制文件。 这是我的结构声明: 在主目录中,我用.dat文件中的一些数据填充列表,看起来还可以,因为如果我打印列表,一切都很好。当我尝试复制列表中的结构时,我遇到了问题一个新的二进制文件。 这是我的功能: 我得到的错误是: ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM