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

86 投票
12 回答
274518 浏览
提问于 2025-04-16 15:43

我需要从一组随机整数(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)

撰写回答