最近在处理一个存档文件,用的两个字节来保存浮点数,不能理解,最后找到了这么一种数据类型:半精度浮点数
Python原生不支持这样的东西,需要外挂numpy,方可将双字节HEX转为半精度浮点
如果是字符串类型的“3c00”这样的东西,可以用unhexlify,转换成binary类型,然后丢到frombuffer里面用
from binascii import unhexlify
import numpy as np
x=unhexlify(bytes("3c00", 'utf-8'))
np.frombuffer(x, np.float16)
结果如下
3.5763e-06
嗯。。等等3c00的二进制表示不是?
0 01111 0000000000
这个不是应该等于1么?(参见维基百科链接)
好吧,大约是数据存储的端的问题
>>> np.frombuffer(b'\x3c\x00', np.float16)
>>> 3.5763e-06
>>> np.frombuffer(b'\x00\x3c', np.float16)
>>> 1
用buffer的时候注意顺序啊。。。