我遇到了Python中的问题,我想我不明白如何在Python中处理签名数字。我的逻辑在Java中工作,其中所有内容都已签名,因此在Python中需要一些帮助。
我有一些用HEX编码的字节,我需要对它们进行解码并将它们解释为数字。协议已定义。
说输入可能如下:
raw ='016402570389FFCF008F1205DB2206CA'
我像这样解码:
bin_bytes = binascii.a2b_hex(raw)
lsb = bin_bytes[5] & 0xff
msb = bin_bytes[6] << 8
aNumber = int(lsb | msb)
print(" X: " + str(aNumber / 4000.0))
除以4000.0后,X可以在-0.000025到+0.25的范围内。
当X在正范围内时,此逻辑有效。什么时候X 为了消极,我回到正数。 我认为当它是带符号的号码时我没有正确处理“msb”。 我应该如何处理负面签名号码 蟒?
任何提示都非常感激。
答案 0 :(得分:0)
您可以使用Python的struct
module将字节字符串转换为整数。它会为您提供字节顺序和符号扩展。我猜你试图将这个16字节的字符串解释为8个2字节有符号整数,采用大端字节顺序。格式字符串为'>8h
。 >
字符告诉Python将字符串解释为大端,8
表示以下数据类型中的8个,而h
表示已签名的短整数。
import struct
nums = struct.unpack('>8h', bin_bytes)
现在nums
是一个整数元组,您可以进一步处理。
我不太确定您的数据是小端还是大端。如果是小端,您可以使用<
以struct.unpack
格式字符串表示。