gpt4 book ai didi

c++ - 将结构转换为 QByteArray?

转载 作者:行者123 更新时间:2023-11-28 02:44:30 25 4
gpt4 key购买 nike

尝试编写一个非常简单的 Qt 程序(因为这就是我的全部能力!)...

...我已将一个相当小的二进制文件读入 QbyteArray,我可以看到 QByteArray 正确地保存了该数据。我想将一个指向结构的指针转换为指向 QByteArray 中数据的指针,这样我就可以轻松访问文件中的数据。然而,它并没有像我预期的那样工作。

例如:

struct fileHeaderStruct
{

uint16_t fileType;
uint32_t fileSize;
uint16_t reserved1;
uint16_t reserved2;
uint32_t startOffset;

};

QByteArray blob = file.readAll();

blob 在其数据数组的开头包含:

42 4D 5E 04 00 00 00 00 00 00 36 04 00 00 28 00 00 00

如果我像这样将指向 fileHeaderStruct 的指针转换为数据:

struct fileHeaderStruct* header;
header = (struct fileHeaderStruct*)blob.data();

header.fileType 是正确的 0x4D42,但其他都是错误的

filesize为0,reserved1为0,reserved2为0x436,startOffset为0x280000

fileSize 应该是 0x45E - 它完全丢失了这两个字节并显示结构的其余部分,就好像这两个字节不存在一样。

那么,有人知道为什么它会丢失或跳过这两个字节吗?

谢谢!

最佳答案

阅读:http://www.catb.org/esr/structure-packing/ .您的结构包装对于您拥有成员的顺序是错误的。默认包装将与机器字大小对齐,在这种情况下几乎可以肯定是 32 位。我认为:

#pragma pack(16)
struct fileHeaderStruct { ...

};
#pragma pack()

应该给你你期望的结果,这取决于你使用的是什么编译器。

关于c++ - 将结构转换为 QByteArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24872026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com