要明白如何将十六进制转换为float或double,需要了解浮点数的二进制存储和转换方式。float和double在存储方式上都遵从IEEE的规范,且float遵从IEEE R32.24,而double遵从R64.53。具体转换规则可以参考http://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html。

按照转换规则,写出HexToFloat和HexToDouble代码如下(buf指向的Hex已经进行高低地址转换):

//将字节中pos位置开始的len位的二进制数转换为整数
unsigned int getbitu(const unsigned char *buff, int pos, int len)
{unsigned int bits=0;int i;for (i=pos;i<pos+len;i++){bits=(bits<<1)+((buff[i/8]>>(7-i%8))&1u);   //从高位到低位逐位计算}return bits;
}float HexToFloat(const unsigned char *buf)
{float value = 0.0;unsigned int i = 0;unsigned int num, temp;int num2;bool flags1 = true;num = getbitu(buf, i, 1); //标志位i = i + 1;
//指数部分,float型数据其规定偏移量为127,阶码有正有负,对于8位二进制,则其表示范围为-128-127num2 = getbitu(buf, i, 8) - 127;i = i + 8;while(1){if(flags1){value += 1 * pow(2, num2);num2--;flags1 = false;}temp = getbitu(buf, i, 1);i += 1;value += temp * pow(2, num2);num2--;if(i == 32)break;}if(num == 1)value *= -1;return value;
}double HexToDouble(const unsigned char* buf)
{double value = 0;unsigned int i = 0;unsigned int num,temp;int num2;bool flags1 = true;num = getbitu(buf,i,1); //标志位               i += 1;
//double型规定偏移量为1023,其表示范围为-1024-1023num2 = getbitu(buf,i,11) - 1023;        i += 11;    while(1){if(flags1){flags1 = false;value += 1 * pow(2,num2); num2--;}temp = getbitu(buf,i,1);    i += 1;value += temp * pow(2,num2); num2--;if(i == 64)break;}if(num == 1)value *= -1;return value;
}

十六进制转double相关推荐

  1. c语言占八个字节的浮点数是,『double转八字节十六进制』double占8字节 一个数字占1字节 为什么能精确16位 我觉得只有8位,,,...

    C# 的double类型的10进制 转化成 字符串的 2进制和16进制的问题 先转换成字组,然后再转成2进制和16进制格字符串XSf道家风水传承网double x = 3.14d;XSf道家风水传承网 ...

  2. java中表示二进制、八进制、十进制、十六进制,double、float、整型

    java里不能这样表示二进制,只能是   8,10,16进制  8:         前置   0  10:      不需前置 16:      前置   0x   或者   0X double:2 ...

  3. Java 中各数字类型(Double, Float, Long, Integer) 之间以及字符串之间的转换

    1. 数字类型间的转换 类型 double, float, long, int 都是 Java 中原始的数字类型. Java 提供了这原始类型的包装类, 并提供了一些便于使用的方法比如类型的转换, 通 ...

  4. 颜色代码六位十六进制字符_8位十六进制颜色

    颜色代码六位十六进制字符 One of the most requested capabilities in my early days of web development was the abil ...

  5. UR机器人数据包解析(python与C++实现)

    一.与UR机器人进行通讯 如果还没有完成电脑与UR机器人的通讯,可以参考这个博客(https://blog.csdn.net/qq_41685265/article/details/104327982 ...

  6. JAVA程序开发参考手册

    <!--包装数据类型 ->//javalangInteger--整数类 //bitCount方法--获取二进制补码中位的数量 int i = 10;int count = Integer. ...

  7. 第十七章:掌握网格(七)

    响应方向变化 应用程序页面的布局通常与特定的外形和宽高比紧密相关.有时,应用程序将要求仅在纵向或横向模式下使用它.但是,当手机改变方向时,应用程序通常会尝试在屏幕上移动. 网格可以帮助应用程序适应方向 ...

  8. C语言:十六进制(HEX)和浮点类型(float、double)转换

    目录 1.浮点类型转换为十六进制 方法1:用地址用指针 方法2:用共用体 方法3: 使用memcpy 2.十六进制转换为浮点类型 近日在研究Modbus协议的时候遇到这样一个情况:使用ModScan3 ...

  9. Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)

    /*** 数据类型转换工具类* @author cyf**/ public class NumConvertUtil{/*** bytes 转16进制字符串* @param bArray* @retu ...

最新文章

  1. SAP Promotion Managementfor Retail (SAP PMR)
  2. 树莓派被曝开春上市,估值高于5亿美元,收入主要来源于生产版权费
  3. maven之build resources resource 详细介绍
  4. Dynamics CRM 注册插件dll到GAC
  5. Python获取本机所有IP地址
  6. tessnet2 在vs2010 及以上版本不能调用的解决方案
  7. Python实现同义词替换(哈工大pyltp分词)
  8. unity tier setting
  9. HDU 4054 Hexadecimal View
  10. mp4parser库
  11. 最简单最明白的关于“事件”和“委托”的例子说明
  12. java 队列线程池_Java线程池Executor使用
  13. 让机器人懂感情:表情符与深度学习
  14. springboot项目打jar包跳过单元测试test
  15. 2010十大网络工具绿色版下载热门推荐(非常好用)
  16. 三十五、jQuery(JavaScript 库)
  17. c语言——游戏思路及其相关函数
  18. iPhone回收中这样看划痕就不会被压价了
  19. Linux任务之自动发邮件
  20. HTML易烊千玺网页,易烊千玺弟弟破世界纪录,被扒两天就被人打破,认证网站遭质疑...

热门文章

  1. 另存为常用位置设置 1.0 绿色版
  2. 此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。...
  3. HDU 2115 -I Love This Game
  4. SharePoint 2007 开发系列(14) 调试sharepoint web part
  5. 微信小程序学习日记day1
  6. 详细记录如何在跨域请求中携带cookie
  7. Java黑皮书课后题第10章:**10.9(Course类)如下改写Course类
  8. Java黑皮书课后题第5章:*5.48(处理字符串)编写一个程序,提示用户输入一个字符串,显示奇数位置的字符
  9. Java黑皮书课后题第5章:*5.18(使用循环语句打印4个图案)使用嵌套的循环语句,编写4个独立的程序打印下面的图案
  10. mysql mariadb nodejs_Nodejs中使用mariadb库连接MySQL数据库