如何解决将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,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,255]
print binascii.hexlify(bytes(bytearray(a)))
版画
000102037fc8ff
这也是在我的机器上处理大型字符串最快的版本。
在Python 2.7或更高版本中,您可以通过使用进行更多改进
binascii.hexlify(memoryview(bytearray(a)))
保存由“ 10”调用创建的副本。
,与我的其他答案类似,除了重复格式字符串:
>>> numbers = [1,255]
>>> fmt = \'{:02X}\' * len(numbers)
>>> fmt.format(*numbers)
\'010FFF\'
,我认为最近的首选方法是f-string
:
\'\'.join(f\'{i:02x}\' for i in [1,255])
格式选项
旧的格式样式是%
语法:
[\'%02x\'%i for i in [1,255]]
更为现代的方法是.format
方法:
[\'{:02x}\'.format(i) for i in [1,255]]
最近,从python 3.6开始,我们使用了f-string
语法:
[f\'{i:02x}\' for i in [1,255]]
格式语法
注意ѭ20的工作原理如下。
:
之前的第一部分是要格式化的输入或变量。
x
表示字符串应为十六进制。比较f\'{100:02x}\'
和f\'{100:02d}\'
。
02
表示字符串应以0
填充到长度为2
。比较f\'{100:02x}\'
和f\'{100:30x}\'
。
,a = [0,255]
print str.join(\"\",(\"%02x\" % i for i in a))
版画
000102037fc8ff
(还要注意,您的代码将无法输入10到15之间的整数。)
,使用python 2.X,您可以执行以下操作:
numbers = [0,255]
print \"\".join(chr(i).encode(\'hex\') for i in numbers)
打印
\'000102037fc8ff\'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。