我尝试将一个库从linux移植到win32,有一个结构定义为:
struct X {
unsigned int type : 4;
unsigned int tag : 4;
}__attribute__((packed));
大小应为1,我将其更改为:
#pragma pack(push, 1)
struct X {
unsigned int type : 4;
unsigned int tag : 4;
};
#pragma pack(pop)
但是sizeof(X)仍然是4,编码会搞砸,我怎样才能将大小改为1?
使用unsigned char
而不是unsigned int
:
struct X {
unsigned char type : 4;
unsigned char tag : 4;
};
static_assert(sizeof(X)==1);