Python十六进制解码器

时间:2015-09-25 14:22:36

标签: python encoding hex ascii decoding

嘿我需要解码十六进制并写入文本文件,但我只能对其进行编码而不是解码。 我编写了一个脚本来编码,它可以工作并打印到名为encoded.txt的文本文件中。

import binascii
with open('encoded.txt','r') as text:
    a = text.readlines()
    for x in a:
        b = binascii.unhexlify(x)
        with open('decoded.txt','a') as done:
            done.write(b + "\n")

到目前为止,我编码(打印“Hello World!”),它返回7072696e74202248656c6c6f20576f726c642122但是当我尝试解码它时会返回一个错误,指出它是奇怪的长度字符串。这可能是因为我在编码器中使用了“\ n”吗? 三江源

1 个答案:

答案 0 :(得分:3)

file.readlines()返回包含行分隔符的

在从十六进制转换为字节之前剥离行分隔符:

b = binascii.unhexlify(x.strip())

str.strip()删除所有前导和尾随空格(空格,制表符,换行符,回车符等)。由于unhexlify的十六进制输入应该只包含字母a-z和数字,所以这只是完美的。您可以将其限制为仅使用x.rstrip('\n')删除尾随换行符

请注意file.readlines()将整个文件读入内存;在这种情况下,您可以逐个处理并避免内存开销。只打开输出文件

with open('encoded.txt','r') as text, open('decoded.txt', 'w') as done:
    for line in text:
        decoded_line = binascii.unhexlify(line.strip())
        done.write(decoded_line + "\n")