如何把十进制浮点数转换为十六进制的32位单精度IEEE754格式

2020-01-20 19:14发布

如何把十进制浮点数转换为十六进制的32位单精度IEEE754格式呢?
比如一个十进制数0d1010.0,转换为IEEE754格式为0x447C8000,然后把数据发送出去,
搜索一番,没找到答案,好像是库函数可以?哪位有代码呢,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
xf331785508
2020-01-22 06:23
本帖最后由 xf331785508 于 2015-1-15 18:08 编辑
arm7tdmi 发表于 2015-1-15 16:37
这种办法貌似不行啊,能得到整数部分,小数部分总是被抹去,变为0,

  1. union  Data
  2. {
  3.     double  srcData;
  4.     u8        memData[sizeof(srcData)];
  5. };


  6. double am = 1010.0f;
  7. union Data   d;
  8. void  fun(void)
  9. {
  10.      unsigned char table[sizeof(am)] = {0}, i = 0, *p = NULL;
  11.      p = (unsigned char*)&am;
  12.      for( i = 0; i < COUNTOF(table); i++ ){
  13.         table[i] = *(p + i);
  14.         printf("table %u value is %u ", i, table[i]);
  15.      }
  16.      d.srcData = am;
  17.      printf("%u ", d.memData[0]);
  18.      MemToFlash(d.memData, sizeof(d));
  19.      sendData((u8*)d.memData, sizeof(d)); //  <==> sendData((unsigned char*)&am, sizeof(am));
  20. }


  21. //你的代码改一下也是等效的
  22. double a = 1010.001;
  23. unsinged char txdata[sizeof(a)] = {0};

  24. void func(void)
  25. {
  26.         unsigned long  data = 0;
  27.         a=1010.0f;                 //10进制
  28.         data = *((unsigned long*)&a);
  29.         txdata[0] = (data >> 56)  &  0xff;
  30.         txdata[1] = (data >> 48)  &  0xff;
  31.         txdata[2] = (data >> 40)  &  0xff;
  32.         txdata[3] = (data >> 32)  &  0xff;
  33.         txdata[4] = (data >> 24)  &  0xff;
  34.         txdata[5] = (data >> 16)  &  0xff;
  35.         txdata[6] = (data >> 8)   &  0xff;
  36.         txdata[7] = a  & 0xff;       //发送代码
  37. }

复制代码

一周热门 更多>