c - 位域结构填充

标签 c structure padding

我想制作一个 36 位的结构,所以我尝试了下面的结构

#pragma pack(push, 1)
 struct{

    unsigned int a : 5;
    unsigned int b : 1;
    unsigned int c : 11;
    unsigned int d : 2;
    unsigned int e : 2;
    unsigned int f : 1;

    unsigned int g : 8;
   unsigned int h : 6;

}HDR;
#pragma pack(pop)

sizeof(HDR): 5, 8*5 = 40 位,我尝试使用 unsigned short 仍然是 40 位。

但我只想使用 36 位。

有什么办法可以做到吗?

谢谢

最佳答案

对象的大小总是sizeof(char) 的倍数. char持有 8大多数平台上的位。容纳36位,您将需要一个大小等于 5*sizeof(char) 的对象然后你得到 40位。

您需要一个大小为 5 的对象持有33 - 40位。

关于c - 位域结构填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640714/

相关文章:

C编程: passing struct as a parameter - Function

java - 如何删除仍然使用流布局的 JPanel 之间的填充?

c - C中while循环中的i++和++i有什么区别

c++ - scanf/sscanf 可以处理转义字符吗?

c - 指向结构体、字段的指针莫名其妙地改变值

c - 使用 uint64_t 32 位和 64 位架构中的结构填充差异

css - 在选择框中填充

c - 按位运算?

c - 我如何使用 free 来释放使用 malloc 进行的堆分配?

c - 如何使用结构创建数据库表