【发布时间】:2011-08-27 23:02:51
【问题描述】:
任何使用位域的可移植代码似乎都可以区分小端和大端平台。有关此类代码的示例,请参阅declaration of struct iphdr in linux kernel。我不明白为什么位字节序是一个问题。
据我了解,位域是纯粹的编译器构造,用于促进位级操作。
例如,考虑以下位域:
在这里,写
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) 的方式。
但是,位操作是定义明确的,并且无论架构如何都可以工作。那么,位域为什么不能移植呢?
【问题讨论】:
-
只要你读和写位就没有问题。问题是另一台机器写入比特或它们的位置在诸如 IP 的标准中规定。 C 标准甚至不固定字节的大小。您实际遇到问题的几率并不高。
-
您认为 d->f2 与 (i>>1)&(1
-
字节序如何影响位域打包:mjfrazer.org/mjfrazer/bitfields
标签: c cross-platform portability low-level bit-fields