1
有: 我必须声明是这样的:铸造指针重用缓冲区
typedef struct
{
quint8 mark1;
quint16 content1;
quint16 content2;
quint8 mark2;
}FrameHead;
,并在功能上,我定义了一个缓冲区,看重它:
quint8 buf[40];
FrameHead *frame = (FrameHead *)buf;
frame->mark1 = 0x68;
frame->content1 = 0x3A;
frame->content1 = 0x3A;
frame->mark2 = 0x68;
所以我想, buf的前6个字节应该是“68 3A 00 3A 00 68”。但事实是,buf的前8个字节是“68 90 3A 00 3A 00 68 80”。并且我使用了:
qDebug() << (quint8 *)(++frame) - buf// output "8" but should be "6"
看似号“0x68”并没有存储为quint8类型,但quint16类型保持一致与其他quint16 types.Anyone已经中遇到同样的问题,并有任何建议。
感谢johannes S.但我需要格式化“buf”。数据包的开始字节和结束字节应该是“0x68”,这就是为什么我将“contents1”,“contents2”插入结构的中间。现在你教会了我导致这个问题的原因应该是对齐的,有没有在VC中像“#Pragma”一样在Qt中设置对齐方式。 – wolfguolei 2013-05-01 15:11:35
@wolfguolei,#pragma pack(1) – richselian 2013-05-01 15:18:27
@richselian,thanks.it也在Qt工作。 – wolfguolei 2013-05-01 15:20:38