标题: 求大牛,float 存放到eeprom的方法。 [打印本页]

作者: 不再记起    时间: 2018-6-30 20:46
标题: 求大牛,float 存放到eeprom的方法。
如题, 请教下 float 的变量 如何放到eeprom里?  试过乘以倍数取整 好像这个办法行不通。 看到有说用 float x;
int x_h, x_l

x_h = *(int * )&x; //这个取floast前面两个字节

x_l = *(((int* )&x)+1); // 这个取后面两个字节存放.  这种办法 我怎么将高位 与低位 再组合回去呢?或有其它的办法吗?
作者: 不再记起    时间: 2018-6-30 22:40
求指点
作者: angmall    时间: 2018-6-30 22:54
用c语言关键字union来解决。

union xxx
{
  char c[4];
  float f;
}y;

定义一个“共用体”xxx,y作为“共用体变量”,里面再定义一个char类型的变量数组c[4]和float类型的变量f。

根据union的定义,里面的变量占用同一个内存地址。所以,c[4]和f的内存地址是一样的,说的再通俗一点,就是c[4]的4个数实际上就是f的四个字节。


作者: 不再记起    时间: 2018-7-1 12:58
angmall 发表于 2018-6-30 22:54
用c语言关键字union来解决。

union xxx

您好。 char c[4]; 这个我是c[4],c[3],c[2].。。。。 这样一个一个存入是吗?
作者: 不再记起    时间: 2018-7-1 14:11
angmall 发表于 2018-6-30 22:54
用c语言关键字union来解决。

union xxx

如果存储的话 直接将 c[4]  。。 c[3]等 一位一位存入????

作者: angmall    时间: 2018-7-1 16:03
如果存储的话 直接将 c[3]  。。 c[0]等 一位一位存入

union xxx
{
  char c[4];
  float f;
}y;

y.f= 1234.567;

eepromSave(y.c[3]);
eepromSave(y.c[2]);
eepromSave(y.c[1]);
eepromSave(y.c[0]);



作者: cangcanglang    时间: 2018-7-2 09:22
float一般来说是32bit,但不同编译器不保证一样,如果你是一个环境那倒无所谓,一般来说数据传输或存储都要字节序列化,json是目前最常用的方法之一




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1