c++ - Visual C++ 中的位域问题

标签 c++ struct

我想在 Visual C++ 中使用这个结构:

struct iphdr
{
    unsigned int ihl:4;
    unsigned int version:4;

    u_int8_t tos;
    u_int16_t tot_len;
    u_int16_t id;
    u_int16_t frag_off;
    u_int8_t ttl;
    u_int8_t protocol;
    u_int16_t check;
    struct in_addr ip_src;
    struct in_addr ip_dst;

};

但是在调试时我发现sizeof(struct iphdr) = 24,它应该是20 奇怪的是,当我用 char 替换 ihlversion 时,sizeof(struct iphdr) = 20

最佳答案

位域 ihlversion 将被放置在 unsigned int 字段中(尽管它们适合一个字符)。因此,由于填充,字段 tos 将放置在偏移量 4 处,而 tot_length 将放置在偏移量 6 处。

关于c++ - Visual C++ 中的位域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553633/

相关文章:

c++ - 确定 std::function 的返回类型

c - 为什么灵活数组成员的静态初始化有效?

python - 为什么struct中第一个打包的数据是little endian,而其余的都是big endian?

c++ - 为什么结构中的 QString 有时是一个坏指针?

c - 发送链表到函数

json - 使用更改的 JSON 属性解码

c++ - Printf - 访问冲突读取位置 - C++

c++ - 带有模板参数的模板中的默认值 (C++)

C++ 字符串到枚举

c++ - 使用工厂方法合并不同的类(c++)