读书人

关于位域是否可以操作一个字节中的某

发布时间: 2012-03-17 19:06:28 作者: rapoo

关于位域,是否可以操作一个字节中的某几位?
定义结构如下:
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++编译器吃了

读书人网 >C语言

热点推荐