共用体(union)是一种数据格式,它能够存储不同类型的数据,但是只能同时存储其中的一种类型。
工具/原料
Microsoft Visual Studio 2012(或其他版本)
一、共用体的声明
1、共用体的语法和结构体的类似,共用体声明格式如下:union uninType{ int fourByte; char oneByte[4];};
2、定义结构后,就可以创建这种类型的变量了:uninTypeTest1;uninTypeTest2;等
二、共用体的使用1
1、假如有定义:uninType Test;test.fourByte=2;则cout << (int)test.oneByte[0] << endl;会输出显示什么?这里涉及到存储大小端模式的问题,答案见步骤2
2、有如下代码:test.fourByte=2;cout << (int)test.oneByte[0] << endl;if (test.o荏鱿胫协neByte[0] == 2) cout << "Little endian!" << endl;else cout << "Big endian!" << endl;这个代码能测试CPU的大小端模式,我使用Intel CORE i3,win7 OS得到输出如下:2Little endian!
三、共用体的使用2
1、在嵌入式系统开发中,有时需要将一些变量存储在EEPROM中,变量类型若是char、坡纠课柩int就很好办,可是如果要存储fl泠贾高框oat、double类型的变量怎么办呢?这个问题可以用共用体解决:union myfloat{ char i[4]; float j;}Test;因为float是四个字节,因此我们定义一个4个元素的char数组和float公用一段内存,接下来就是EEPROM存取了
2、在程序中要使用 j 的地方使用Test.j就行了,想把 j 存入EEPROM可以这皱诣愚继样:EEPROM_WRITE(0,myfloat.i[0]);EEPROM_WRITE(1,m烤恤鹇灭yfloat.i[1]);EEPROM_WRITE(2,myfloat.i[2]);EEPROM_WRITE(3,myfloat.i[3]);注:上面参数0、1、2、3为EEPROM地址,上面的EEPROM_WRITE只是示意,有时需要对地址使用(void*)进行类型转换
3、想把 j 从EEPROM读出可以这样:myfloat.i[0]=EEPROM_READ(0);myfloat.i[1]=EEPROM_READ(1);myfloat.i[2]=EEPROM_READ(2);myfloat.i[3]=EEPROM_READ(3);然后在程序中继续使用Test.j就可以了是不是很简单呢