2013-04-06 74 views
-2

如果我知道我在一个小端机器上,我该如何转换一个14位位域的endiannes?我应该如何转换14位位域的字节序?

struct { 
    unsigned foo : 14, bar 2; 
} baz; 

我有一种预感,baz.foo = htons(baz.foo)将无法​​正常工作。

+2

位字段没有单一布局,因此没有从“小端位字段”到“大端位字段”的标准转换。如果你指定了你想要转换的布局,或许你的问题是可以回答的,但是在目前的形式下,它不是。 – 2013-04-06 20:33:09

+1

另请注意,“字节顺序”是指字节的顺序,而不是位的顺序。位不可寻址,因此即使您尝试,也无法观察它们在一个字节内如何存储在内存中。 – 2013-04-06 20:36:02

+0

@PascalCuoq我在x86 Linux上使用GCC。所以'bar'的2位应该放在结构第一个字节的最高位。 – Matt 2013-04-06 20:36:21

回答

1

将它与uint16_t结合在一起并交换。

+0

但是,这将与其他两位交换。 – Matt 2013-04-06 20:28:30

+2

@Matt:位域的字节序不存在。正如帕斯卡尔所说,字节顺序是字节顺序。 – 2013-04-06 21:46:15