gpt4 book ai didi

python - 在 Python 中将字节转换为有符号数

转载 作者:行者123 更新时间:2023-12-05 04:09:14 25 4
gpt4 key购买 nike

我在 Python 中遇到了一个问题,我想我不明白在 Python 中如何处理带符号的数字。我的逻辑适用于 Java,其中所有内容均已签名,因此需要 Python 方面的帮助。

我有一些以十六进制编码的字节,我需要对它们进行解码并将它们解释为数字。协议(protocol)已定义。

说输入可能看起来像:
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”。我应该如何处理负符号数 python ?

非常感谢任何提示。

最佳答案

您可以使用 Python 的 struct module将字节字符串转换为整数。它会为您处理字节顺序和符号扩展。我猜你正试图将这个 16 字节的字符串解释为 8 个 2 字节有符号整数,以大端字节顺序排列。此格式字符串为 '>8h . >字符告诉 Python 将字符串解释为大端,8表示以下数据类型中的 8 个,h表示带符号的短整数。

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

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

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

关于python - 在 Python 中将字节转换为有符号数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46354444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com