将int格式化为十六进制字符串

| 我需要从随机整数(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])
但是,这看起来有点尴尬。有没有更简单的方法?     
已邀请:
\'\'.join(\'%02x\'%i for i in input)
    
为了完整起见,请使用现代的
.format()
语法:
>>> numbers = [1, 15, 255]
>>> \'\'.join(\'{:02X}\'.format(a) for a in numbers)
\'010FFF\'
    
>>> str(bytearray([0,1,2,3,127,200,255])).encode(\'hex\')
\'000102037fc8ff\'
    
另一个选择是
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)))
保存由“ 10”调用创建的副本。     
与我的其他答案类似,除了重复格式字符串:
>>> numbers = [1, 15, 255]
>>> fmt = \'{:02X}\' * len(numbers)
>>> fmt.format(*numbers)
\'010FFF\'
    
我认为最近的首选方法是
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
语法:
[f\'{i:02x}\' for i in [1, 15, 255]]
格式语法 注意ѭ20的工作原理如下。
:
之前的第一部分是要格式化的输入或变量。
x
表示字符串应为十六进制。比较
f\'{100:02x}\'
f\'{100:02d}\'
02
表示字符串应以
0
填充到长度为
2
。比较
f\'{100:02x}\'
f\'{100:30x}\'
。     
a = [0,1,2,3,127,200,255]
print str.join(\"\", (\"%02x\" % i for i in a))
版画
000102037fc8ff
(还要注意,您的代码将无法输入10到15之间的整数。)     
使用python 2.X,您可以执行以下操作:
numbers = [0, 1, 2, 3, 127, 200, 255]
print \"\".join(chr(i).encode(\'hex\') for i in numbers)
打印
\'000102037fc8ff\'
    

要回复问题请先登录注册