Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解包/解码十六进制字节的十六进制字符串?_Python_Python 3.x_Binary_Hex - Fatal编程技术网

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']

嗨,安德烈。谢谢你的帮助。它似乎起作用了。一个问题。我在一个列表中有几个十六进制字符串,我想将您的解决方案应用于每个字符串。那么,如何将输出分配给变量而不是打印?