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

关于位域,是否可以操作一个字节中的某几位?该怎么处理

2012-03-17 
关于位域,是否可以操作一个字节中的某几位?定义结构如下:typedefstructa{unsignedcharLow:4unsignedcharH

关于位域,是否可以操作一个字节中的某几位?
定义结构如下:
typedef   struct   a
{
unsigned   char   Low:4;
unsigned   char   High:4;
}testbit;

testbit   b;
b.High   =   0x03;
b.Low   =   0;

char   bb   =   '0 ';
memcpy(&bb,(char   *)&b,1);

能保证最好bb的值一定是0x30吗?


[解决办法]
我的方案:
char bb = (char)b.High ;
[解决办法]

typedef struct a
{
unsigned char Low:4;
unsigned char High:4;
}testbit;
typedef union u
{
testbit tb;
char ch;
} u;

给ch赋值,要不用位操作也行的吧
[解决办法]
位 是不倒序的,
所以,可以确认 bb=0x30
[解决办法]
关于位域,是否可以操作一个字节中的某几位?
====================
当然可以。

根据定义,
把某些位【必须是连续的】定义为一个位域成员,
然后操作这个成员即可。
比如你这里的 b.High = 0x03; 就是高四位赋值为 0x30 ...
[解决办法]
如果是多个字节,
那么可能字节序是 倒序的,
这个就需要根据不同的环境进行判断。

也就是多字节情况下,
memcpy 可能无法得到正确的结果,
因为字节序不对。

但是这里只有一个字节,
结果是可以确认的。
[解决办法]
如果不行,我把你的C++编译器吃了

热点排行