python中怎么将['0x41','0x4a','0x9a','0x99']转换成浮点数

如题,通过socket采集的数据,需要将此格式转换成浮点数

谢谢大家

阅读 6.2k
3 个回答

python处理二进制数据,比如存取文件,socket操作时.这时候,可以使用struct模块来完成.可以用struct来处理c语言中的结构体, 可处理结构体字节对齐, 网络字节序大小端等等问题.

import struct
for each in a:
    print struct.unpack("0f", each)
a = ['0x41', '0x4a', '0x9a', '0x99']
re = []

for x in a:
    re.append(float(int(x, 16)))

print re

或者你也可以用lambda表达式,会更简洁和优雅。

re = map(lambda x : float(int(x, 16)), a)

是不是把这四个字符弄成一个float啊,也不知道字节序,下边按默认弄一个例子

import struct

a = ['0x41', '0x4a', '0x9a', '0x99']

raw = struct.pack('BBBB', int(a[0], 16), int(a[1], 16), int(a[2], 16), int(a[3], 16))
# raw = 'AJ\x9a\x99'
theFloat = struct.unpack('f', raw)[0]
# theFloat = -1.5953217705540475e-23

PS:socket得到的应该是原始的数据如:'\x41\x4a\x9a\x99'之类的str或者buffer等,怎么是个字符数组['0x41', '0x4a', '0x9a', '0x99']

总之你还是看看这里吧python document

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进