10

我有一个负整数(4 个字节),我想要它的二进制补码表示的十六进制形式。

>>> i = int("-312367")
>>> "{0}".format(i)
'-312367'
>>> "{0:x}".format(i)
'-4c42f'

但我想看“FF……”

4

6 回答 6

6

这是一种方法(对于 16 位数字):

>>> x=-123
>>> hex(((abs(x) ^ 0xffff) + 1) & 0xffff)
'0xff85'

(虽然可能不是最优雅的方式)

于 2010-07-13T08:58:51.093 回答
5
>>> x = -123
>>> bits = 16
>>> hex((1 << bits) + x)
'0xff85'
>>> bits = 32
>>> hex((1 << bits) + x)
'0xffffff85'
于 2010-07-13T09:57:32.820 回答
4

使用位串模块:

>>> bitstring.BitArray('int:32=-312367').hex
'0xfffb3bd1'
于 2010-07-13T09:06:04.320 回答
3

简单的

>>> hex((-4) & 0xFF)
'0xfc'
于 2014-08-27T14:46:58.127 回答
2

要将整数视为二进制值,请按位并使用所需位长的掩码。

例如,对于一个 4 字节的值(32 位),我们使用0xffffffff:

>>> format(-1 & 0xffffffff, "08X")
'FFFFFFFF'
>>> format(1 & 0xffffffff, "08X")
'00000001'
>>> format(123 & 0xffffffff, "08X")
'0000007B'
>>> format(-312367 & 0xffffffff, "08X")
'FFFB3BD1'
于 2015-08-28T03:10:12.927 回答
0

struct模块执行 Python 值和表示为 Python 字节对象的 C 结构之间的转换。打包字节对象提供对单个字节值的访问。这可用于显示底层 (C) 整数表示。

>>> packed = struct.pack('>i',i) # big-endian integer
>>> type(packed)
<class 'bytes'>
>>> packed
b'\xff\xfb;\xd1'
>>> "%X%X%X%X" % tuple(packed)
'FFFB3BD1'
>>> 
于 2010-07-13T11:09:01.827 回答