【发布时间】:2014-07-01 16:27:29
【问题描述】:
我想做一个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 bits,我试过 unsigned short 仍然是 40 bits。
但我只想使用 36 位。
有什么办法可以做到吗?
谢谢
【问题讨论】:
-
有什么理由不能使用
unsigned char HDR[36]之类的东西吗?还要记住 int 的大小在不同的编译器和平台之间是不一样的。 -
这段代码在为
<stdint.h>标头尖叫 -
如果我使用 unsigned char HDR[36] 那就是 36 字节的权利但是我需要 36 位的位域
-
除非您使用的是具有 36 位字长的机器,否则您将无法获得 36 位,而这与现在的情况相去甚远。总大小将始终是整数字节,因此位将始终是 CHAR_BITS 的倍数(在您的机器上可能是 8)。
-
您可能还真的想小心订购。根据您正在编译的机器,字节顺序可能会成为一个问题,当然取决于您的使用模型。我通常将位字段用于应该直接读写硬件寄存器的嵌入式系统。在这些情况下,您真的必须注意位和字节顺序!!!