33

有谁知道如何在输出始终为两位数的情况下将字符转换为十六进制?

例如,如果我的转换产生 0x1,我需要将其转换为0x01,因为我正在连接一个长的十六进制字符串。

我正在使用的代码是:

hexStr += hex(ord(byteStr[i]))[2:]
4

7 回答 7

61

您可以为此目的使用字符串格式:

>>> "0x{:02x}".format(13)
'0x0d'

>>> "0x{:02x}".format(131)
'0x83'

编辑:您的代码表明您正在尝试将字符串转换为十六进制字符串表示形式。有一种更简单的方法可以做到这一点(Python2.x):

>>> "abcd".encode("hex")
'61626364'

另一种方法(也适用于 Python 3.x)是函数binascii.hexlify().

于 2012-07-26T19:46:35.897 回答
17

您可以使用格式功能:

>>> format(10, '02x')
'0a'

您不需要删除该0x部分(就像您对 所做的那样[2:]

于 2012-07-26T19:46:30.420 回答
6
htmlColor = "#%02X%02X%02X" % (red, green, blue)
于 2015-01-12T17:48:57.673 回答
5

如果您使用的是 python 3.6 或更高版本,您还可以使用 fstrings:

v = 10
s = f"0x{v:02x}"
print(s)

输出:

0x0a

大括号部分的语法与 相同string.format(),不同之处在于您使用变量的名称。有关更多信息,请参阅https://www.python.org/dev/peps/pep-0498/

于 2018-10-21T20:19:09.640 回答
4

标准模块binascii也可能是答案,即当您需要转换更长的字符串时:

>>> import binascii
>>> binascii.hexlify('abc\n')
'6162630a'
于 2012-07-26T20:06:40.547 回答
2

使用格式而不是使用十六进制函数:

>>> mychar = ord('a')
>>> hexstring = '%.2X' % mychar

您还可以将数字“2”更改为所需的位数,将“X”更改为“x”以在十六进制字母数字的大小写表示之间进行选择。

许多人认为这是 Python 中旧的 % 样式格式,但我喜欢它,因为格式字符串语法与其他语言(如 C 和 Java)使用的格式相同。

于 2012-07-26T20:00:24.387 回答
1

最简单的方法(我认为)是:

your_str = '0x%02X' % 10
print(your_str)

将打印:

0x0A

% 之后的数字将在字符串中转换为十六进制,我认为这样很清楚,来自 C 背景的人(比如我)感觉更像家

于 2017-07-14T11:58:29.037 回答