C/C++:[4]如何使用共用体(union)

2025-10-20 20:16:14

1、共用体的语法和结构体的类似,共用体声明格式如下:

union uninType

{

  int fourByte;

  char oneByte[4];

};

2、定义结构后,就可以创建这种类型的变量了:

uninType Test1;

uninType Test2;

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.oneByte[0] == 2)

    cout << "Little endian!" << endl;

else

    cout << "Big endian!" << endl;

这个代码能测试CPU的大小端模式,我使用Intel CORE i3,win7 OS得到输出如下:

2

Little endian!

C/C++:[4]如何使用共用体(union)

1、在嵌入式系统开发中,有时需要将一些变量存储在EEPROM中,变量类型若是char、int就很好办,可是如果要存储float、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,myfloat.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就可以了

是不是很简单呢

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢