如何在Python中将十进制数转换为字节列表

4 投票
5 回答
9404 浏览
提问于 2025-04-16 09:23

如何把一个长的无符号整数转换成四个字节的十六进制数?

举个例子...

777007543 = 0x2E 0x50 0x31 0xB7

5 个回答

3

使用 struct模块

In [6]: import struct
In [14]: map(hex,struct.unpack('>4B',struct.pack('>L',777007543)))
Out[14]: ['0x2e', '0x50', '0x31', '0xb7']

或者,如果大小写很重要的话,

In [17]: map('0x{0:X}'.format,struct.unpack('>4B',struct.pack('>L',777007543)))
Out[17]: ['0x2E', '0x50', '0x31', '0xB7']
4

使用这个:

In [1]: hex(777007543)
Out[1]: '0x2e5031b7'

你应该可以从这里开始重新格式化它。

4

我想到的最简单的方法是使用struct模块,可以在列表推导式中使用:

import struct
print [hex(ord(b)) for b in struct.pack('>L',777007543)]
# ['0x2e', '0x50', '0x31', '0xb7']

要获取大写的十六进制数字稍微复杂一点,但也不是特别难:

import string
import struct
xlate = string.maketrans('abcdef', 'ABCDEF')

print [hex(ord(b)).translate(xlate) for b in struct.pack('>L',777007543)]
# ['0x2E', '0x50', '0x31', '0xB7']

更新

根据你的评论,听起来你可能在使用Python 3——尽管你的问题没有标记“python-3.x”——而且现在大多数人都在使用这个版本,所以这里有一段代码可以在两个版本中都能运行(生成大写的十六进制字母):

import struct
import sys

if sys.version_info < (3,):  # Python 2?
    def hexfmt(val):
        return '0x{:02X}'.format(ord(val))
else:
    def hexfmt(val):
        return '0x{:02X}'.format(val)

byte_list = [hexfmt(b) for b in struct.pack('>L', 777007543)]
print(byte_list)  # -> ['0x2E', '0x50', '0x31', '0xB7']

撰写回答