首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

位域中比特序的有关问题

2012-02-24 
位域中比特序的问题如果定义如下的结构体structCLS{unsignedchars1:3unsignedchars2:2unsignedchars3:3

位域中比特序的问题
如果定义如下的结构体
struct   CLS
{
unsigned   char   s1:3;
unsigned   char   s2:2;
unsigned   char   s3:3;
}s;//定义1

void   main()
{
s.s1=4;
s.s2=2;
s.s3=3;
}

在小端系统中是按如下的顺序存放的
s3     s2   s1
011   10   100

当s从小端系传递给大端系统中时,会按如下的顺序来解释
s1     s2     s3
011   10   100
即解释的结果为:
s.s1=3
s.s2=2
s.s3=4

要避免出现这种解释错误,我现在用的笨方法是在定义结构的位域顺序时就按反序
排列,即修改为:
struct   CLS
{
unsigned   char   s3:3;
unsigned   char   s2:2;
unsigned   char   s1:3;
}s;//定义2

我想问的是如果我还安照定义1的方法来定义结构体
有没有类似htons   ntohs处理字节序的方法来处理这种比特序
因为一开始写代码的时候没有考虑这个问题,
导致和别的系统通讯的大量结构体的都定义成了反序的了

请各位高人不吝赐教,谢谢

[解决办法]
union CLS
{
struct CLS_little_endian
{
unsigned char s1:3;
unsigned char s2:2;
unsigned char s3:3;
};
struct CLS_big_endian
{
unsigned char s3:3;
unsigned char s2:2;
unsigned char s1:3;
};
}s; //这样定义可以么?
[解决办法]
偶觉得有这个要求还是不用位域方便些, 自己位操作算了, 位域好像标准没规定顺序的吧 ...
[解决办法]
自己定义一个吧,好象没有捷径啊

热点排行