c++ - 具有位字段重新排序的结构?

标签 c++ c struct

我用匿名结构和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/

相关文章:

c++ - 从其对象中获取结构字段的名称和类型

c++ - 将 struct 写入文件时写入了太多字节

c++ - 使用 POCO C++ 通过 TCP 连接发送和接收 OOB 数据

c++ - OpenCV VideoWriter 打不开

c - 在 C 中使用正则表达式验证文件内容时出错

c - ARM 未对齐内存访问解决方法

c - 结构内部的动态矩阵,C 编程

c++ - Visual Studio:std::string 的乱码调试监视?

c++ - 如何在 DirectX 11.1 中部分更新常量缓冲区

c - 使用线程发现 CPU 核心数