我用匿名结构和unonon写了一个结构:
字节是typedef unsigned char byte
struct dns_flags
{
union
{
struct
{
byte QR : 1;
byte opCode : 4;
byte AA : 1;
byte TC : 1;
byte RD : 1;
byte RA : 1;
byte zero : 3;
byte rcode : 4;
};
uint16_t flagsValue;
};
};
代表 DNS 协议(protocol)标志。
我使用了#pragma pack(push,1)
和 while sizeof(dns_flags) == 2
when flagsValue == 0x8180
;然后 rcode = 8
。所以我想知道结构在内存中的布局: rcode
半字节是更高的?!这没有任何意义......使用 VS2012
家伙
最佳答案
位域的实际顺序未在标准中指定。完全取决于编译器做它喜欢做的事(只要它每次都以相同的方式做)。我认为大多数编译器都遵循机器本身的字节顺序(因此第一个字段在小端机器中是最低位,而在大端机器中是最高位),但这并不能保证,只是“约定”。
关于c++ - 具有位字段重新排序的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18529111/