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

| 我有一个很长的十六进制字符串,代表一系列不同类型的值。我希望将此十六进制字符串转换为字节数组,以便可以将每个值移出并将其转换为适当的数据类型。     
已邀请:
假设您的十六进制字符串类似于
>>> 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\')
注意,
bytes
bytearray
的不变版本。     
字节数组中有一个内置函数可以满足您的要求。
bytearray.fromhex(\"de ad be ef 00\")
它返回一个字节数组,并读取带或不带空格的十六进制字符串。     
如果我理解正确,则应查找binascii.unhexlify
import binascii
a=\'45222e\'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
    
假设你有一个像这样的字节串 \“ \\ x12 \\ x45 \\ x00 \\ xAB \” 而且您知道字节的数量及其类型,也可以使用这种方法
import struct

bytes = \'\\x12\\x45\\x00\\xAB\'
val = struct.unpack(\'<BBH\', bytes)

#val = (18, 69, 43776)
当我在格式字符串的开头指定了小尾数(使用\'<\'char)时,该函数返回了等效的十进制数。 0x12 = 18 0x45 = 69 0xAB00 = 43776 B等于一个字节(8位)无符号 H等于两个字节(16位)无符号 可在此处找到更多可用字符和字节大小 优点是.. 您可以指定多个字节和值的字节序 缺点 您确实需要知道处理的数据的类型和长度     
您应该可以使用以下方法构建一个包含二进制数据的字符串:
data = \"fef0babe\"
bits = \"\"
for x in xrange(0, len(data), 2)
  bits += chr(int(data[x:x+2], 16))
这可能不是最快的方法(许多字符串追加),但仅使用核心Python相当简单。     
您可以使用Python标准库中的编解码器模块,即
import codecs

codecs.decode(hexstring, \'hex_codec\')
    
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
    
一个好的衬板是:
byte_list = map(ord, hex_string)
这将遍历字符串中的每个字符并通过ord()函数运行它。仅在python 2.6上进行了测试,不太了解3.0以上版本。 -乔什     

要回复问题请先登录注册