在 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 ?
>>> import ctypes
>>> a = 0x17c7cc6e
>>> ctypes.c_int32(a).value
398969966
>>> b = 0xc158a854
>>> ctypes.c_int32(b).value
-1051154348
关于python - Python 中十六进制数的二进制补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641664/