600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 通过Python实现4字节32位二进制转换为十进制单精度浮点数

通过Python实现4字节32位二进制转换为十进制单精度浮点数

时间:2022-10-24 14:14:08

相关推荐

通过Python实现4字节32位二进制转换为十进制单精度浮点数

与底层设备做通讯,无论是串行通讯还是TCP,经常遇到以字节形式传输的数据格式,得到底层报文后的数据解析就成了重点。

这个百度求解的过程真是一言难尽,大部分都是复制粘贴,不知所云。

这里将最终结果记录一下。

32位二进制是4个字节,从左到右位0~31,设备间传输格式可能不同,到时候注意高低字节转换。

其中最高位bit0是符号位,0位整数,1位负数。

往后数8位,bit1~bit8是幂指数,意思就是这个byte的二进制数转成整数,然后减去127,所得的这个值m,就是2的m次方。

剩下的位是小数,从左到右开始依次数下去,第n位是1就累加上2的-n次方。

把这三个数相乘就是最终结果。

def float_t(b):b = b.replace(" ","") # 去除空格,测试用方便x = bin(eval('0x'+b))[2:] # 直接不能转,加0x才认if (len(x)<32): # 简单的补0操作x = '0'*(32-len(x)) + xelse:x = xif int(x[0])==1: # 符号位判断sign = -1else:sign = 1mi = 2 ** (int(x[1:9], 2)-127) # 幂指数xiao = 1for num,i in enumerate(x[9:]): # 小数部分,是1的位做2的-n次方全部累加if i == '1':xiao = 2**(-(num+1)) + xiaoreturn sign * mi * xiao# 这就是自制的32bit转float函数了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。