【问题标题】:Python hex decoderPython 十六进制解码器
【发布时间】:2015-12-23 09:55:32
【问题描述】:

嘿,我需要解码十六进制并写入文本文件,但我只能对其进行编码而不是解码。 我已经编写了一个脚本来编码,它可以工作并打印到名为 encode.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”吗? 谢谢你

【问题讨论】:

  • 如果您认为它可能是由空格引起的,请在解码之前尝试stripping 字符串
  • 我正在尝试解码 7072696e74202248656c6c6f20576f726c642122 以尝试获取(打印“Hello World!”)
  • @IsithaSubasinghe:如果你使用print repr(x),你会发现你没有'7072696e74202248656c6c6f20576f726c642122',而是'7072696e74202248656c6c6f20576f726c642122\n'

标签: python encoding hex ascii decoding


【解决方案1】:

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")

【讨论】:

  • 谢谢你没有考虑开销
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 2014-12-28
  • 2016-04-17
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
相关资源
最近更新 更多