Python 中十六进制数的二进制补码

2024-02-23

下面的a和b(十六进制),代表有符号二进制数的补码。 例如:

a = 0x17c7cc6e
b = 0xc158a854

现在我想知道 a 和 b 以 10 为基数的有符号表示。抱歉,我是一名低级程序员,并且是 python 新手;觉得问这个问题很愚蠢。我不关心额外的图书馆,但答案应该简单明了。背景:a和b是从UDP数据包中提取的数据。我无法控制格式。因此,请不要给我一个假设我可以事先更改这些变量的格式的答案。

我已将 a 和 b 转换为以下内容:

aBinary = bin(int(a, 16))[2:].zfill(32) => 00010111110001111100110001101110 => 398969966
bBinary = bin(int(b, 16))[2:].zfill(32) => 11000001010110001010100001010100 => -1051154348

我试图做这样的事情(不起作用):

if aBinary[1:2] == 1:
aBinary = ~aBinary + int(1, 2)

在 python 中执行此操作的正确方法是什么?


为什么不使用ctypes https://docs.python.org/2/library/ctypes.html?highlight=c_int32#ctypes.c_int32 ?

>>> import ctypes
>>> a = 0x17c7cc6e
>>> ctypes.c_int32(a).value
398969966
>>> b = 0xc158a854
>>> ctypes.c_int32(b).value
-1051154348
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中十六进制数的二进制补码 的相关文章

随机推荐