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