zoukankan      html  css  js  c++  java
  • 【转】关于存储float浮点数到flash或eeprom中的方法

    https://blog.csdn.net/ssss992/article/details/79771414

    float 单精度浮点数占用32bit空间,不像存储整型或char型数据那么便捷,我们在存储float数据时就需要先将float数变换一下,变换成数组的格式,这样就方便存储和读取了,具体实现有以下方法:

    第一种存储方式(取地址法): 

    uint8_t datatmp[4]; //定义数组 因为float数据 占4个字节
    float s; //这是要存储的浮点数
    uint8_t *p; //定义一个u8指针变量
    p=(uint8_t*)&s; //取浮点数的地址

    memcpy(datatmp,p,4); //拷贝浮点数地址4个字节到数组

    这种方式就是用取地址的方式,然后又知道浮点数占用的空间,这样就可以通过拷贝即可将浮点数转移到数组中。

    第二种存储方式(利用共用体):

    union
    {
      float x;
      uchar s[4];
    }F32_Sep;

    然后把a的值赋给F32_Sep.x,这样一来其实s[0]对应了浮点数的最高位,s[3]对应其最低位,因此,保存到EEPROM中只需将s[0]~s[3]即可。

    这就是利用了共用体共用一段内存的原理,即 float x 和 uchar s[4],使用的是一个空间大小的内存。

  • 相关阅读:
    UVa 1364
    一个无向图博弈游戏
    poj 2777 Count Color (线段树)
    UVA 1660
    JS中的caller属性
    “给在读研究生+未来要读研同学们的一封受益匪浅的信”(摘录+整合)
    用cmd重命名.htaccess
    java Scoket的c\s结构聊天室
    log4j详解
    检查文本文件编码的Java程序
  • 原文地址:https://www.cnblogs.com/tubujia/p/14082114.html
Copyright © 2011-2022 走看看