如何在Python中将十六进制字符串转换为字节?

245 投票
7 回答
567154 浏览
提问于 2025-04-16 15:38

我有一个很长的十六进制字符串,它代表了一系列不同类型的值。我需要把这个十六进制字符串转换成 bytesbytearray,这样我才能从原始数据中提取每个值。我该怎么做呢?

比如,字符串 "ab" 应该转换成字节 b"\xab" 或者相应的字节数组。更长的例子:

>>> # what to use in place of `convert` here?
>>> convert("8e71c61de6a2321336184f813379ec6bf4a3fb79e63cd12b")
b'\x8eq\xc6\x1d\xe6\xa22\x136\x18O\x813y\xeck\xf4\xa3\xfby\xe6<\xd1+'

7 个回答

20

如果我理解没错的话,你应该去找一下binascii.unhexlify这个东西。

import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
166

在bytearray里有一个内置的函数,可以完成你想要的功能。

bytearray.fromhex("de ad be ef 00")

这个函数会返回一个bytearray,它可以读取带空格或不带空格的十六进制字符串。

401

假设你的十六进制字符串看起来像这样:

>>> hex_string = "deadbeef"

将其转换为字节数组(适用于Python 3和2.7):

>>> bytearray.fromhex(hex_string)
bytearray(b'\xde\xad\xbe\xef')

将其转换为字节对象(适用于Python 3):

>>> bytes.fromhex(hex_string)
b'\xde\xad\xbe\xef'

注意,bytesbytearray 的不可变版本,也就是说一旦创建就不能再改变。

将其转换为字符串(适用于Python ≤ 2.7):

>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"

撰写回答