0

我在位域和字节序方面遇到了一些麻烦......我很困惑。

我需要解析从网络获取的一些数据,发送的是 lil endian(我使用 boost::asio)

你能解释一下吗

struct TEST
{
 unsigned short _last : 1;
 unsigned short _ID : 6;
 unsigned short _LENGH : 9;

};
struct TEST2
{
 unsigned short _LENGH:9 ;
 unsigned short _ID:6 ;
 unsigned short _last:1 ;
};


int main(int argc, char* argv[])
{
 printf("Hello World!\n");

 TEST one;
 one._ID    = 0;
 one._last  = 0;
 one._LENGH = 2; //the value affected here is always divided by 2, it is multiplied by 2 when i cast a short to this structure

 TEST2 two;
 two._ID   =  0;
 two._last  = 0;
 two._LENGH = 2; //the value here is well stored


 bit_print((char*)&one,2);
 bit_print((char*)&two,2);
 return 0;
}

[输出]

00000000 00000001

00000010 00000000

4

1 回答 1

3

您为什么说第二个值“存储良好”?看看你自己的输出:如果第一个字段 ( _LENGTH)two应该由 9 位组成,那么第二个输出也是不正确的。它应该是00000001 00000000,但你得到了00000010 00000000,这意味着two你的值被“乘”了 2。

我猜你bit_print是坏了,打印废话。

(强制性免责声明:位域布局是实现定义的。当您使用位域时,不能保证 C++ 语言中与布局相关的任何内容。)

于 2010-09-03T16:49:56.493 回答