我正在使用python numpy读取minew信标,现在我在将固定点转换为float时遇到问题。
在Minew E7数据表上,我具有以下信息:Datasheet infos
我必须将定点8.8转换为浮点数。
我正在使用以下代码进行转换:
from rig.type_casts import fp_to_float
def convertFixedPToFloat(hexaString):
hexaInt16 = int(hexaString,16)
f4 = fp_to_float(n_frac=8)
return (f4(hexaInt16))
如果查看数据表,十六进制数字0xFFFE必须为-0.01,但是我的函数返回的是:255.9921875
我的phython版本是Python 3.7.3
我如何以严格的方式进行转换?
您需要将无符号整数转换为有符号整数。
if hexaInt16 >= 0x8000:
hexaInt16 -= 0x10000
以上内容仅针对您所提问的数字。对于更通用的从无符号到有符号的转换,可以使用此功能。
def signed(n, bits=16):
n &= (1 << bits) - 1
if n >> (bits - 1):
n -= 1 << bits
return n