在Python

时间:2017-09-21 23:05:09

标签: python bit-manipulation signed

我遇到了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”。 我应该如何处理负面签名号码 蟒?

任何提示都非常感激。

1 个答案:

答案 0 :(得分:0)

您可以使用Python的struct module将字节字符串转换为整数。它会为您提供字节顺序和符号扩展。我猜你试图将这个16字节的字符串解释为8个2字节有符号整数,采用大端字节顺序。格式字符串为'>8h>字符告诉Python将字符串解释为大端,8表示以下数据类型中的8个,而h表示已签名的短整数。

import struct
nums = struct.unpack('>8h', bin_bytes)

现在nums是一个整数元组,您可以进一步处理。

我不太确定您的数据是小端还是大端。如果是小端,您可以使用<struct.unpack格式字符串表示。