当我这样做时在python终端上: -
In [6]: 0xffffff85
Out[6]: 4294967173
In [9]: "%d" %(0xffffff85)
Out[9]: '4294967173'
我希望能够提供0xffffff85
并获得python中签名的等效十进制数(在本例中为-123
)。我怎么能这样做?
在C中,我可以这样做: -
int main() { int x = 0xffffff85; printf("%d\n", x); }
答案 0 :(得分:3)
您可以使用ctypes
库。
>>> import ctypes
>>> ctypes.c_int32(0xffffff85).value
-123
您也可以使用bitstring
库执行相同操作。
>>> from bitstring import BitArray
>>> BitArray(uint = 0xffffff85, length = 32).int
-123L
如果没有外部/内部库,您可以这样做:
int_size = 32
a = 0xffffff85
a = (a ^ int('1'*a.bit_length())) + 1 if a.bit_length() == int_size else a
如果数字a
的{{1}}等于您的bit_length()
值,则会获得数字a
的2的补码。 int_size
值是您签名二进制数[[int_size
]的最大位长。
假设数字已签名,a
位负数将使其第一位(符号位)设置为1.因此int_size
将等于bit_length
。