float数据如何存在u8数组里面

关注

单片机 单片机综合应用 hangtao    2019-03-19   |   浏览量 107  
float数据如何存在u8数组里面

最佳答案

  • xdsnet 发表于2019-03-20

    上面很大同学审题不认真,楼主说说用U8数组存储Float数,就是32位数的。

    袁建明的回答很认真也很合适。

    当然还有其他的方法

    比如:

    float a=3.14;

    u8 a8[4];

    u8 *ap= &a;

    a8[0]= *ap;

    a8[1]= *(ap+1);

    a8[2]= *(ap+2);

    a8[3]= *(ap+3);


    不过这样的方法没有前面袁建明给出的方法标准、常见、方便。

    类似double数据其实也是可以存储的。


    回答点赞:   问答管理员3号 Linux小学童 _行者_ 举报 评论 3

其他答案

  • 袁建明 发表于 2019-03-19 云汉达人

    使用union联合体进行转化,例如
    typedef union 
    {
        float a;
        u8 b[4];
    }float_t;   
    程序中定义数据类型:float_t  test;
    test.a=3.14f; 则可以获得对应的U8类型数组test.b[]={0XC30XF50X480X40};

    回答点赞:   问答管理员3号 xdsnet 举报 评论 2

  • chen0000009 发表于 2019-03-19

    float的位数是32为,要想用8位来保存,需要舍弃掉其中的若干位,可以定个协议,比如8位前面4位保存整数部分低4位,后四位保存小数部分高4位这样

    举报 评论 0

  • 莱克迷KW 发表于 2019-03-19

    flaot占用4个字节,要使用4个u8的数组存储

    举报 评论 0

  • LoveMyDog 发表于 2019-03-19

    直接float向char类型的做法是用__ftol2_sse命令完成,具体怎么做的就不跟了,想跟也能跟,结果放在al里面,然后move byte到结果。
    这里是如果是范围相当,float是char能表示的数结果是正确的,如果是更大的,就是从4个byte中截取一个byte,不会有自动的clamp到边界-128这种。
    到了针对unsigned char的表示可以看出使用频繁的loat,store完成的,本身就很慢,尽管c++代码很简洁,但是出来的汇编并不好,结果是截取类的,也是不会clamp。
    ​    float a = -10.0f;

    004132FE  fld         dword ptr [__real@c1200000 (415850h)] 

    00413304  fstp        dword ptr [a] 

        char b = static_cast<char>(a);

    00413307  fld         dword ptr [a] 

    0041330A  call        @ILT+220(__ftol2_sse) (4110E1h) 

    0041330F  mov         byte ptr [b]al 

        unsigned char c = (unsigned char)a;

    00413312  fld         dword ptr [a] 

    00413315  fnstcw      word ptr [ebp-0E6h] 

    0041331B  movzx       eaxword ptr [ebp-0E6h] 

    00413322  or          eax0C00h 

    00413327  mov         dword ptr [ebp-0ECh]eax 

    0041332D  fldcw       word ptr [ebp-0ECh] 

    00413333  fistp       dword ptr [ebp-0F0h] 

    00413339  fldcw       word ptr [ebp-0E6h] 

    0041333F  mov         albyte ptr [ebp-0F0h] 

    00413345  mov         byte ptr [c]al 


    举报 评论 0

  • donatello 发表于 2019-03-20

    最简单的方式就是将固定位数的Float数拆开,逐位逐位保存。

    举报 评论 0

  • 你中有我 发表于 2019-03-20

    存储的时候是按int的大小存储的,是占32位的,要分成4个8位的来存储的

    举报 评论 0

  • 名字太长没记住 发表于 2019-03-20

    对浮点数求余分别一个个放在数组元数里面

    举报 评论 0

  • d6372b97c2fc28a9 发表于 2019-03-20

    float类型的数据,每次只取第八位(可以是高8位也可以是低8位),然后保存,然后再取次8位,保存,再取再保存就行了

    举报 评论 0

  • 明有几时有 发表于 2019-03-20

    使用指针的方式,要使用4个大小的u8数组的。因为浮点占用了32位的大小

    举报 评论 0

我来回答

试用推荐

嵌入式设计和开发教程

产品总数:8个  申请人数:119

距离结束时间:

推荐达人 更多>

  • 向悫 向ta提问

    川楠

    一切能用程序解决的问题都不是问题

    在行: 单片机综合应用 硬件设计

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 STM32讨论区

  • 徐珂靖 向ta提问

    xukejing

    规格严格,功夫到家

    在行: 开发板综合 Linux 系统

  • 袁建明 向ta提问

    河北博联科技有限公司 研发部经理

    日知其所亡

    在行: 嵌入式 Linux 系统

  • 张峰 向ta提问

    光学总工

    用心工作,用心生活

    在行: 嵌入式 Linux 系统

完成答题
赶快去开启您的宝箱吧