|
楼主 |
发表于 2013-4-19 02:57:22
|
显示全部楼层
本帖最后由 guew 于 2013-4-19 03:13 编辑
machao 发表于 2013-4-18 22:05
我大概明白LZ为什么要如此处理。
比如如下的应用,对于上层软件,需要处理的是一个4字节的LONG型数组,而 ...
这个union好生了得啊!和位域配合使用,就可以将用户的数据控制能力扩展到比特级别!(刚刚发现的,大牛看了别笑话哈~)- #include <stdio.h>
- #define cut (uint8 *)
- typedef unsigned char uint8;
- typedef struct
- {
- uint8 byte0_0:1;
- uint8 byte0_1:1;
- uint8 byte0_2:1;
- uint8 byte0_3:1;
- uint8 byte0_4:1;
- uint8 byte0_5:1;
- uint8 byte0_6:1;
- uint8 byte0_7:1;
- uint8 byte1_0:1;
- uint8 byte1_1:1;
- uint8 byte1_2:1;
- uint8 byte1_3:1;
- uint8 byte1_4:1;
- uint8 byte1_5:1;
- uint8 byte1_6:1;
- uint8 byte1_7:1;
- uint8 byte2_0:1;
- uint8 byte2_1:1;
- uint8 byte2_2:1;
- uint8 byte2_3:1;
- uint8 byte2_4:1;
- uint8 byte2_5:1;
- uint8 byte2_6:1;
- uint8 byte2_7:1;
- uint8 byte3_0:1;
- uint8 byte3_1:1;
- uint8 byte3_2:1;
- uint8 byte3_3:1;
- uint8 byte3_4:1;
- uint8 byte3_5:1;
- uint8 byte3_6:1;
- uint8 byte3_7:1;
- } type_bit;
- typedef union
- {
- type_bit this_bit;
- float this_float;
- } type_cast;
- void main()
- {
- type_cast this_cast;
- this_cast.this_float = 6.66;
- printf("%x %x %x %x\n",(cut&this_cast)[3],(cut&this_cast)[2],(cut&this_cast)[1],(cut&this_cast)[0]);
- printf("%d%d%d%d%d%d%d%d %d%d%d%d%d%d%d%d %d%d%d%d%d%d%d%d %d%d%d%d%d%d%d%d\n",\
- this_cast.this_bit.byte3_7,\
- this_cast.this_bit.byte3_6,\
- this_cast.this_bit.byte3_5,\
- this_cast.this_bit.byte3_4,\
- this_cast.this_bit.byte3_3,\
- this_cast.this_bit.byte3_2,\
- this_cast.this_bit.byte3_1,\
- this_cast.this_bit.byte3_0,\
- this_cast.this_bit.byte2_7,\
- this_cast.this_bit.byte2_6,\
- this_cast.this_bit.byte2_5,\
- this_cast.this_bit.byte2_4,\
- this_cast.this_bit.byte2_3,\
- this_cast.this_bit.byte2_2,\
- this_cast.this_bit.byte2_1,\
- this_cast.this_bit.byte2_0,\
- this_cast.this_bit.byte1_7,\
- this_cast.this_bit.byte1_6,\
- this_cast.this_bit.byte1_5,\
- this_cast.this_bit.byte1_4,\
- this_cast.this_bit.byte1_3,\
- this_cast.this_bit.byte1_2,\
- this_cast.this_bit.byte1_1,\
- this_cast.this_bit.byte1_0,\
- this_cast.this_bit.byte0_7,\
- this_cast.this_bit.byte0_6,\
- this_cast.this_bit.byte0_5,\
- this_cast.this_bit.byte0_4,\
- this_cast.this_bit.byte0_3,\
- this_cast.this_bit.byte0_2,\
- this_cast.this_bit.byte0_1,\
- this_cast.this_bit.byte0_0);
- this_cast.this_bit.byte0_0 = 1;
- this_cast.this_bit.byte0_1 = 1;
- this_cast.this_bit.byte0_2 = 0;
- this_cast.this_bit.byte0_3 = 1;
- this_cast.this_bit.byte0_4 = 1;
- this_cast.this_bit.byte0_5 = 1;
- this_cast.this_bit.byte0_6 = 1;
- this_cast.this_bit.byte0_7 = 0;
- this_cast.this_bit.byte1_0 = 0;
- this_cast.this_bit.byte1_1 = 0;
- this_cast.this_bit.byte1_2 = 1;
- this_cast.this_bit.byte1_3 = 0;
- this_cast.this_bit.byte1_4 = 1;
- this_cast.this_bit.byte1_5 = 0;
- this_cast.this_bit.byte1_6 = 0;
- this_cast.this_bit.byte1_7 = 0;
- this_cast.this_bit.byte2_0 = 0;
- this_cast.this_bit.byte2_1 = 1;
- this_cast.this_bit.byte2_2 = 1;
- this_cast.this_bit.byte2_3 = 1;
- this_cast.this_bit.byte2_4 = 0;
- this_cast.this_bit.byte2_5 = 0;
- this_cast.this_bit.byte2_6 = 0;
- this_cast.this_bit.byte2_7 = 0;
- this_cast.this_bit.byte3_0 = 1;
- this_cast.this_bit.byte3_1 = 0;
- this_cast.this_bit.byte3_2 = 0;
- this_cast.this_bit.byte3_3 = 0;
- this_cast.this_bit.byte3_4 = 0;
- this_cast.this_bit.byte3_5 = 0;
- this_cast.this_bit.byte3_6 = 1;
- this_cast.this_bit.byte3_7 = 0;
- printf("%f",this_cast.this_float);
- }
复制代码 如果能把指针强制转换到比特就完美了。 |
|