如何在Python中将十进制数转换为字节列表
如何把一个长的无符号整数转换成四个字节的十六进制数?
举个例子...
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']