• 已解决 33699 个问题
  • 已帮助 5814 位优秀工程师

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

hangtao 2019-03-19 浏览量:525
float数据如何存在u8数组里面
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 上面很大同学审题不认真,楼主说说用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数据其实也是可以存储的。


    • 发布于 2019-03-20
    • 举报
    • 评论 0
    • 3
    • 0

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

    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 2
    • 0

  • float的位数是32为,要想用8位来保存,需要舍弃掉其中的若干位,可以定个协议,比如8位前面4位保存整数部分低4位,后四位保存小数部分高4位这样
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • flaot占用4个字节,要使用4个u8的数组存储
    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接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 


    • 发布于2019-03-19
    • 举报
    • 评论 0
    • 0
    • 0

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

    • 发布于2019-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 存储的时候是按int的大小存储的,是占32位的,要分成4个8位的来存储的
    • 发布于2019-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • float类型的数据,每次只取第八位(可以是高8位也可以是低8位),然后保存,然后再取次8位,保存,再取再保存就行了
    • 发布于2019-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 使用指针的方式,要使用4个大小的u8数组的。因为浮点占用了32位的大小
    • 发布于2019-03-20
    • 举报
    • 评论 0
    • 0
    • 0

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