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

标签 python python-2.7 binary hex

在 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/

相关文章:

python - 具有非常量质量矩阵的非线性微分方程的解

python-2.7 - 如何获取特定的维基百科页面部分?

c - InternetReadFile() 破坏 C 中的下载

binary - 二元 NOT (~) 运算符如何工作?

python - 在python中生成15分钟时间间隔数组

c++ - C++读取二进制数据

python - POST 方法执行正确的发布,然后重新呈现整个页面

python - 让 str.count() 在 python 上工作

python - 如何在python的 Mechanize 模块中使用SSH代理? (可以这样做吗?)

macos - 适用于 Mac OSX 的 IPython3