如果我知道我在一个小端机器上,我该如何转换一个14位位域的endiannes?我应该如何转换14位位域的字节序?
struct {
unsigned foo : 14, bar 2;
} baz;
我有一种预感,baz.foo = htons(baz.foo)
将无法正常工作。
如果我知道我在一个小端机器上,我该如何转换一个14位位域的endiannes?我应该如何转换14位位域的字节序?
struct {
unsigned foo : 14, bar 2;
} baz;
我有一种预感,baz.foo = htons(baz.foo)
将无法正常工作。
将它与uint16_t
结合在一起并交换。
但是,这将与其他两位交换。 – Matt 2013-04-06 20:28:30
@Matt:位域的字节序不存在。正如帕斯卡尔所说,字节顺序是字节顺序。 – 2013-04-06 21:46:15
位字段没有单一布局,因此没有从“小端位字段”到“大端位字段”的标准转换。如果你指定了你想要转换的布局,或许你的问题是可以回答的,但是在目前的形式下,它不是。 – 2013-04-06 20:33:09
另请注意,“字节顺序”是指字节的顺序,而不是位的顺序。位不可寻址,因此即使您尝试,也无法观察它们在一个字节内如何存储在内存中。 – 2013-04-06 20:36:02
@PascalCuoq我在x86 Linux上使用GCC。所以'bar'的2位应该放在结构第一个字节的最高位。 – Matt 2013-04-06 20:36:21