将整数格式化为十六进制字符串
我需要从一组随机整数(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])
不过,这样看起来有点复杂。有没有更简单的方法呢?
12 个回答
58
最近,个人认为最好的方法是使用 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]]
格式语法
注意 f'{i:02x}'
的工作原理如下:
- 冒号
:
前面的部分是要格式化的输入或变量。 x
表示这个字符串应该是十六进制的。比如f'{100:02x}'
的结果是'64'
,而f'{100:02d}'
(十进制)是'100'
,f'{100:02b}'
(二进制)是'1100100'
。02
表示这个字符串的最小长度是2
,如果长度不够,就用0
填充到左边。比如f'{100:02x}'
是'64'
,而f'{100:30x}'
的结果是' 64'
。
想了解更多格式化选项,可以查看 pyformat。
185
为了完整起见,这里介绍一下现代的 .format()
语法:
>>> numbers = [1, 15, 255]
>>> ''.join('{:02X}'.format(a) for a in numbers)
'010FFF'
71
这段代码是用来做某些操作的,但具体的功能和目的需要根据上下文来理解。一般来说,代码块里包含了一些指令或者逻辑,用来处理数据或实现特定的功能。
如果你看到类似的代码,通常可以想象成是计算机在执行一系列的任务。每一行代码就像是给计算机下达的命令,告诉它该做什么。
在学习编程的过程中,理解这些代码块的含义非常重要。你可以尝试逐行分析,看看每一行是如何影响整体的,慢慢就能掌握其中的逻辑。
记住,编程就像是在给计算机讲故事,每一行代码都是故事的一部分,最终会形成一个完整的故事情节。
''.join('%02x'%i for i in input)