我試圖打包一個結構,使用g ++在
64位
32位窗口。C/C++結構打包不起作用
struct Foo
{
uint8_t a;
uint32_t b;
} __attribute__((packed));
int main(int argc, char *argv[])
{
qDebug() << "sizeof(Foo):" << sizeof(Foo);
return 0;
}
此輸出8.其他的事情我已經試過:
{ uint8_t a; } // Gives 1, correct.
{ uint8_t a; float b; } // Gives 8, expected 5.
{ uint8_t a; uint16_t b; } // Gives 4, expected 3.
{ uint16_t a; uint8_t b; uint8_t c; } // Gives 4, correct.
所以看起來像結構包裝,但sizeof
在某些情況下,圍捕? (其實在寫完這個問題之後,我想我可以回答它,但無論如何我都會爲後人發佈它。)
編輯:其實我不知道。我認爲aligned(1)
會解決它,但它不會。
如果你能回答它,繼續前進。 – chris
@Timmmm如果你使用'#pragma pack(1)'編碼。 – Sathish
如果你想讓它們更小,可以嘗試在結構體中放置最後一個較小的類型。 –