Python 如何解包/解码十六进制字节的十六进制字符串?
我正在尝试解包/解码一个二进制字符串,如下所示:Python 如何解包/解码十六进制字节的十六进制字符串?,python,python-3.x,binary,hex,Python,Python 3.x,Binary,Hex,我正在尝试解包/解码一个二进制字符串,如下所示: hex_string = '\x00\x00\x01p\x89 \x01\x89\x00\x00\x01p\x80 \x01\x89\t\x89oPIE' '00 00 01 70 89 20 01 89 09 89 6F 50 49 45' 这是我当前的代码: >从结构导入解包 >>>十六进制字符串='\x00\x00\x01p\x80\x01\x89\x00\x00\x01p\x80\x01\x89\t\x89oPIE' >>>解包('d
hex_string = '\x00\x00\x01p\x89 \x01\x89\x00\x00\x01p\x80 \x01\x89\t\x89oPIE'
'00 00 01 70 89 20 01 89 09 89 6F 50 49 45'
这是我当前的代码:
>从结构导入解包
>>>十六进制字符串='\x00\x00\x01p\x80\x01\x89\x00\x00\x01p\x80\x01\x89\t\x89oPIE'
>>>解包('d',十六进制字符串)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
struct.error:解包需要长度为8的字符串参数
>>>十六进制字符串解码('hex')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/encodings/hex_codec.py”,第42行,十六进制解码
输出=binascii.a2b_十六进制(输入)
TypeError:找到非十六进制数字
我想要的结果是这样的:
hex_string = '\x00\x00\x01p\x89 \x01\x89\x00\x00\x01p\x80 \x01\x89\t\x89oPIE'
'00 00 01 70 89 20 01 89 09 89 6F 50 49 45'
我怎样才能做到这一点?谢谢您可以使用
str.format()
执行以下任务:
hex_string = '\x00\x00\x01p\x89 \x01\x89\x00\x00\x01p\x80 \x01\x89\t\x89oPIE'
print(*['{:02x}'.format(ord(ch)) for ch in hex_string], sep=' ')
印刷品:
00 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 45
['00 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 41', '01 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 42', '02 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 43']
编辑:要获得要列表的输出,可以使用以下命令:
hex_strings = [
'\x00\x00\x01p\x89 \x01\x89\x00\x00\x01p\x80 \x01\x89\t\x89oPIA',
'\x01\x00\x01p\x89 \x01\x89\x00\x00\x01p\x80 \x01\x89\t\x89oPIB',
'\x02\x00\x01p\x89 \x01\x89\x00\x00\x01p\x80 \x01\x89\t\x89oPIC'
]
def get_hex_string(s):
return ' '.join('{:02x}'.format(ord(ch)) for ch in s)
out = [get_hex_string(hs) for hs in hex_strings]
print(out)
印刷品:
00 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 45
['00 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 41', '01 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 42', '02 00 01 70 89 20 01 89 00 00 01 70 80 20 01 89 09 89 6f 50 49 43']
嗨,安德烈。谢谢你的帮助。它似乎起作用了。一个问题。我在一个列表中有几个十六进制字符串,我想将您的解决方案应用于每个字符串。那么,如何将输出分配给变量而不是打印?