您当前的位置: 首页 > 

风间琉璃•

暂无认证

  • 0浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

共用体实现浮点数、负数的存储

风间琉璃• 发布时间:2022-04-07 20:33:03 ,浏览量:0

一、共用体

共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

定义格式为:

union 共用体名  {     共用体成员 1,     共用体成员 2,     ... };

 结构体和共用体的区别:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

结构体占用的内存大于等于所有成员占用的内存的总和(对齐造成的),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

使用场景:

1.通信中的数据包会用到共用体,因为不知道对方会发送什么样的数据包过来,定义几种格式的包,收到包之后就可以根据包的格式取出数据。

2.节约内存。如果有2个大内存的数据结构,但不会同时使用,可以考虑用共用体来设计。

3.某些应用需要大量的临时变量,变量类型不同,而且会随时更换。而堆栈空间有限,不能同时分配大量临时变量。这时可以使用共用体让这些变量共享同一个内存空间,这些临时变量不用长期保存,用完即丢,和寄存器差不多,不用维护。

二、数据存储  1.浮点数

定义共用体

union eeprom_float
{
	float a;
	uint8_t b[4];
}float_write,float_read;

// 声明
float_write.a = 3.1415926;

浮点数是4个字节,声明float_write.a=3.1415926,由于共用体共占一段内存,把一个float拆分为4个字节,然后逐字节的写入EEPROM,来达到保存float数据的目的。所以,通过float_read.b即可拆分flaot数据。

读写数据:

for(i=0;i            
关注
打赏
1665385461
查看更多评论
0.1047s