我试图打包一个结构,使用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
如果你想让它们更小,可以尝试在结构体中放置最后一个较小的类型。 –