为什么位Endianness是位域中的一个问题?
任何使用位字段的可移植代码似乎都可以区分小平台和大端平台。见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).
d->f2
(i>>1) & (1<<4 - 1)
但是,位操作是定义良好的,并且不管体系结构如何都能工作.那么,为什么位域不是可移植的呢?
墨色风雨
RISEBY
大话西游666
相关分类