python中的十六进制字符串到字节数组

时间:2011-04-13 12:43:58

标签: python bytearray

我有一个长十六进制字符串,表示一系列不同类型的值。我希望将此Hex字符串转换为字节数组,以便我可以将每个值移出并将其转换为适当的数据类型。

8 个答案:

答案 0 :(得分:184)

假设您的十六进制字符串类似于

>>> hex_string = "deadbeef"

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

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

或者自Python 2.7和Python 3.0以来:

>>> bytes.fromhex(hex_string)  # Python ≥ 3
b'\xde\xad\xbe\xef'

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

请注意bytesbytearray的不可变版本。

答案 1 :(得分:132)

在bytearray中有一个内置函数可以执行您想要的操作。

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

它返回一个bytearray,它读取带或不带空格分隔符的十六进制字符串。

答案 2 :(得分:14)

如果我理解正确,你应该寻找binascii.unhexlify

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

答案 3 :(得分:2)

您应该能够使用以下内容构建一个包含二进制数据的字符串:

data = "fef0babe"
bits = ""
for x in xrange(0, len(data), 2)
  bits += chr(int(data[x:x+2], 16))

这可能不是最快的方式(许多字符串追加),但只使用核心Python非常简单。

答案 4 :(得分:1)

您可以在Python标准库中使用Codecs module,即

  {"2","nn","ww","male","1-1-2019","389238","akl","lah","400"}

  {"1","abc","xyz","male","1-1-2019","333823","bcw","pak","383"}

答案 5 :(得分:-2)

def hex2bin(s):
    hex_table = ['0000', '0001', '0010', '0011',
                 '0100', '0101', '0110', '0111',
                 '1000', '1001', '1010', '1011',
                 '1100', '1101', '1110', '1111']
    bits = ''
    for i in range(len(s)):
        bits += hex_table[int(s[i], base=16)]
    return bits

答案 6 :(得分:-3)

好的衬垫是:

byte_list = map(ord, hex_string)

这将迭代字符串中的每个字符并通过ord()函数运行它。仅在python 2.6上测试过,不太确定3.0 +。

-Josh

答案 7 :(得分:-3)

用于反向转换使用 binascii.b2a_hex(OBJ)