python中的hexstring到字节数组

我有一个很长的hexstring,表示一系列不同types的值。 我希望将这个hexstring转换成一个字节数组,以便我可以将每个值转换出来,并将其转换为适当的数据types。

假设你的hexstring是类似的

>>> hex_string= "deadbeef" 

将其转换为一个string(Python≤2.7):

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

或者从Python 2.7和Python 3.0开始:

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

bytearray中有一个内置函数,可以实现你想要的function。

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

它返回一个字节数组,它读有或没有空格分隔符的hexstring。

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

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

你应该能够build立一个持有二进制数据的string,如:

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

这可能不是最快的方法(很多string追加),但是只使用核心Python很简单。

假设你有像这样的字节string

“\ X12 \ X45 \ X00 \ XAB”

你知道字节的数量和他们的types,你也可以使用这种方法

 import struct bytes = '\x12\x45\x00\xAB' val = struct.unpack('<BBH', bytes) #val = (18, 69, 43776) 

由于我在格式string的开头指定了little endian(使用'<'char),函数返回了十进制等值。

0x12 = 18

0x45 = 69

0xAB00 = 43776

B等于一个字节(8位)无符号

H等于两个字节(16位)无符号

更多可用的字符和字节大小可以在这里find

好处是..

您可以指定多个字节和值的末尾

缺点..

你真的需要知道你处理的数据的types和长度

 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 

一个好的class轮是:

 byte_list = map(ord, hex_string) 

这将迭代string中的每个字符并通过ord()函数运行。 只在Python 2.6上testing,不太确定3.0+。

-Josh

为了反向转换,使用binascii.b2a_hex(obj)