可能重复: 什么是'unsigned temp:3'的意思 我正在学习一些内核代码,并沿着下面的行(在Linux 2.4中,sched.h,struct mm_struct): unsigned dumpable:1; 这是什么意思?
我需要一个布尔数组的紧凑表示,Python有一个内置的位域types,还是我需要find一个替代解决scheme?
我有一个结构,我需要填充和写入磁盘(实际上几个)。 一个例子是: byte-6 bit0 – original_or_copy bit1 – copyright bit2 – data_alignment_indicator bit3 – PES_priority bit4-bit5 – PES_scrambling control. bit6-bit7 – reserved 在CI中可以做如下的事情: struct PESHeader { unsigned reserved:2; unsigned scrambling_control:2; unsigned priority:1; unsigned data_alignment_indicator:1; unsigned copyright:1; unsigned original_or_copy:1; }; 有没有办法在C#中这样做,使我能够使用struct dereferencing点运算符访问位? 对于一些结构,我可以在一个存取函数中进行位移。 我有这样的结构负载,所以我正在寻找更容易阅读和更快写的东西。
任何使用位域的便携式代码似乎都可以区分小端和大端平台。 在linux内核中查看struct iphdr的声明就是这样的代码的例子。 我不明白为什么比特序列是一个问题。 据我所知,位域是纯粹的编译器构造,用于方便位级操作。 例如,考虑下面的位域: struct ParsedInt { unsigned int f1:1; unsigned int f2:3; unsigned int f3:4; }; uint8_t i; struct ParsedInt * d =&i; 在这里,写d->f2只是一个简洁而可读的说法(i>>1) & (1<<4 – 1) 。 但是,位操作是精确定义的,而且不pipe架构如何。 那么,怎么来的位域是不可移植的?
可能重复: 这个C ++代码是什么意思? 我正在尝试使用JNA将C结构映射到Java。 我遇到了一些我从未见过的东西。 struct定义如下: struct op { unsigned op_type:9; //—> what does this mean? unsigned op_opt:1; unsigned op_latefree:1; unsigned op_latefreed:1; unsigned op_attached:1; unsigned op_spare:3; U8 op_flags; U8 op_private; }; 你可以看到一些变量被定义为unsigned op_attached:1 ,我不确定这是什么意思。 这会影响为这个特定变量分配的字节数吗?