怎么把浮点值转换为4字节的16进制数? 10
比如1能转换为0000803F2能转换为0000004010是00002041是怎么换算出的?...
比如 1 能转换为00 00 80 3F 2能转换为 00 00 00 40 10是 00 00 20 41
是怎么换算出的? 展开
是怎么换算出的? 展开
1个回答
展开全部
我关于这个写了一篇论文.
在公司现有的产品通讯协议升级的过程中,涉及到了浮点数的传输。利用传统的做法就是将浮点数乘以一个整数倍数,将其放大到一定的精度再取整,将取整后的整数传输出去,到了目的地,再将整数除以相应的倍数,还原回真实值,这种方法虽然可以避免传输过程中浮数的操作,可是却给通讯双方带来了计算上的压力,将一个浮点数放大若干倍及缩小若干倍是需要进行乘除法运算的。而且标准的Modbus RTU协议也是允许传递浮点数操作的,因此,在通讯中使用浮点数是,最主要的是要注意浮点数在内存中的存储格式,这是通讯双方正确解析通讯数据的前提。IEEE委员会对浮点数的结构做了明确的规定,而且现在大多数的硬件厂商及编译器都采用了IEEE对浮点数的规定,IEEE规定了二进制浮点数可采用32位、64位及128位表示。对于我们公司所使用的研发的产品及对未来产品发展的预测,使用32位浮点数足以满足数据的大小及精度的要求,因此我们通讯协议中的浮点数采用32位二进制表示,根据IEEE的规定,32位浮点数表示为
(-1)s X be X m
其中
S为0或1
b为所使用的进制
e为一个整数且eMin<=e<=eMax
m被表示为下面一组数字形式的数值,d0.d1d2d3d4……dp-1(di是一个整数且0<=di<=b),因此 0<=m<b。
对于用32位二进制表示的浮点数,b的取值为2,eMin = 0,eMax = 127。例如-11的二进制表示为-1011,转换为上面的IEEE表示形式为
(-1)1 X (10)3 X (1.011),将IEEE表示形式编码为32位二进制数的表示形式为
其中e使用移码表示,
IEEE对浮点数规定相关内容参见《The IEEE Standard for Floating-Point Arithmetic》。
在公司现有的产品通讯协议升级的过程中,涉及到了浮点数的传输。利用传统的做法就是将浮点数乘以一个整数倍数,将其放大到一定的精度再取整,将取整后的整数传输出去,到了目的地,再将整数除以相应的倍数,还原回真实值,这种方法虽然可以避免传输过程中浮数的操作,可是却给通讯双方带来了计算上的压力,将一个浮点数放大若干倍及缩小若干倍是需要进行乘除法运算的。而且标准的Modbus RTU协议也是允许传递浮点数操作的,因此,在通讯中使用浮点数是,最主要的是要注意浮点数在内存中的存储格式,这是通讯双方正确解析通讯数据的前提。IEEE委员会对浮点数的结构做了明确的规定,而且现在大多数的硬件厂商及编译器都采用了IEEE对浮点数的规定,IEEE规定了二进制浮点数可采用32位、64位及128位表示。对于我们公司所使用的研发的产品及对未来产品发展的预测,使用32位浮点数足以满足数据的大小及精度的要求,因此我们通讯协议中的浮点数采用32位二进制表示,根据IEEE的规定,32位浮点数表示为
(-1)s X be X m
其中
S为0或1
b为所使用的进制
e为一个整数且eMin<=e<=eMax
m被表示为下面一组数字形式的数值,d0.d1d2d3d4……dp-1(di是一个整数且0<=di<=b),因此 0<=m<b。
对于用32位二进制表示的浮点数,b的取值为2,eMin = 0,eMax = 127。例如-11的二进制表示为-1011,转换为上面的IEEE表示形式为
(-1)1 X (10)3 X (1.011),将IEEE表示形式编码为32位二进制数的表示形式为
其中e使用移码表示,
IEEE对浮点数规定相关内容参见《The IEEE Standard for Floating-Point Arithmetic》。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
TableDI
2024-07-18 广告
2024-07-18 广告
Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击30步自动完成vlookup匹配,无需手写公式,免费使用!...
点击进入详情页
本回答由TableDI提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询