找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2492|回复: 6
打印 上一主题 下一主题
收起左侧

求大牛,float 存放到eeprom的方法。

[复制链接]
跳转到指定楼层
楼主
ID:362432 发表于 2018-6-30 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题, 请教下 float 的变量 如何放到eeprom里?  试过乘以倍数取整 好像这个办法行不通。 看到有说用 float x;
int x_h, x_l

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

x_l = *(((int* )&x)+1); // 这个取后面两个字节存放.  这种办法 我怎么将高位 与低位 再组合回去呢?或有其它的办法吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:362432 发表于 2018-6-30 22:40 来自手机 | 只看该作者
求指点
回复

使用道具 举报

板凳
ID:155507 发表于 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的四个字节。

回复

使用道具 举报

地板
ID:362432 发表于 2018-7-1 12:58 | 只看该作者
angmall 发表于 2018-6-30 22:54
用c语言关键字union来解决。

union xxx

您好。 char c[4]; 这个我是c[4],c[3],c[2].。。。。 这样一个一个存入是吗?
回复

使用道具 举报

5#
ID:362432 发表于 2018-7-1 14:11 | 只看该作者
angmall 发表于 2018-6-30 22:54
用c语言关键字union来解决。

union xxx

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

使用道具 举报

6#
ID:155507 发表于 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]);


回复

使用道具 举报

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表