我需要从随机整数列表(0-255)创建一个十六进制数字字符串。每个十六进制数字应由两个字符表示:5 - “05”,16 - “10”等
示例:
Input: [0,1,2,3,127,200,255], Output: 000102037fc8ff
我设法提出:
#!/usr/bin/env python
def format_me(nums):
result = ""
for i in nums:
if i <= 9:
result += "0%x" % i
else:
result += "%x" % i
return result
print format_me([0,1,2,3,127,200,255])
然而,这看起来有点尴尬。有更简单的方法吗?
答案 0 :(得分:100)
为了完整起见,请使用现代.format()
语法:
>>> numbers = [1, 15, 255]
>>> ''.join('{:02X}'.format(a) for a in numbers)
'010FFF'
答案 1 :(得分:49)
''.join('%02x'%i for i in input)
答案 2 :(得分:31)
>>> str(bytearray([0,1,2,3,127,200,255])).encode('hex')
'000102037fc8ff'
答案 3 :(得分:14)
另一个选项是binascii.hexlify
:
a = [0,1,2,3,127,200,255]
print binascii.hexlify(bytes(bytearray(a)))
打印
000102037fc8ff
这也是我机器上大字符串的最快版本。
在Python 2.7或更高版本中,您可以使用
进一步改善这一点binascii.hexlify(memoryview(bytearray(a)))
保存bytes
来电所创建的副本。
答案 4 :(得分:10)
与我的其他答案类似,只是重复格式字符串:
>>> numbers = [1, 15, 255]
>>> fmt = '{:02X}' * len(numbers)
>>> fmt.format(*numbers)
'010FFF'
答案 5 :(得分:3)
a = [0,1,2,3,127,200,255]
print str.join("", ("%02x" % i for i in a))
打印
000102037fc8ff
(另请注意,对于10到15之间的整数,您的代码将失败。)
答案 6 :(得分:2)
从 Python 3.6 开始,您可以使用 f-strings:
>>> number = 1234
>>> f"{number:04x}"
'04d2'
答案 7 :(得分:0)
使用python 2.X,您可以执行以下操作:
numbers = [0, 1, 2, 3, 127, 200, 255]
print "".join(chr(i).encode('hex') for i in numbers)
打印
'000102037fc8ff'
答案 8 :(得分:0)
我认为,最新的首选方法是f-string
:
''.join(f'{i:02x}' for i in [1, 15, 255])
旧的格式样式是%
语法:
['%02x'%i for i in [1, 15, 255]]
更现代的方法是.format
方法:
['{:02x}'.format(i) for i in [1, 15, 255]]
最近,从python 3.6开始,我们被视为f-string
syntax:
[f'{i:02x}' for i in [1, 15, 255]]
请注意,f'{i:02x}'
的工作方式如下。
:
前面的第一部分是要格式化的输入或变量。 x
指示字符串应为he x 。比较f'{100:02x}'
和f'{100:02d}'
。02
指示该字符串应以0
的长度左侧填充2
。比较f'{100:02x}'
和f'{100:30x}'
。答案 9 :(得分:0)
带有一些美化功能的示例,类似于python 3.8中可用的sep选项
def prettyhex(nums, sep=''):
return sep.join(f'{a:02x}' for a in nums)
numbers = [0, 1, 2, 3, 127, 200, 255]
print(prettyhex(numbers,'-'))
输出
00-01-02-03-7f-c8-ff
答案 10 :(得分:0)
来自Python documentation。使用内置的format()函数,您可以使用'x'或'X'指定十六进制基数 示例:
x = 255 print('数字为{:x}'。format(x))
输出:
数字是ff
这是基本选项
类型
'b'二进制格式。输出以2为底的数字。
'c'字符。在打印之前将整数转换为相应的unicode字符。
'd'十进制整数。输出以10为底的数字。
'o'八进制格式。输出以8为底的数字。
'x'十六进制格式。使用以小写字母表示9以上的数字,输出以16为底的数字。
“ X”十六进制格式。以大写字母输出大于9的数字,以16为基数输出数字。
'n'号。这与“ d”相同,除了它使用当前的语言环境设置来插入适当的数字分隔符。
无与“ d”相同。