这次转换的输出发生了什么,为什么不是我认为它应该是什么?

时间:2014-08-12 20:37:13

标签: python hex base64 byte codec

我正在尝试用Python编写一个简短的程序,将字符串从十六进制转换为字节,然后从字节转换为base64。我有一个十六进制的基本字符串,相当于base64中的字符串。该计划如下:

import codecs

basecode = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"
DesiredResult = "SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t"
e = codecs.decode(basecode, 'hex')
print(e)
y = codecs.encode(e, 'base64')
print(y)
z = bytes.decode(y, 'utf-8')
print(z)
print(DesiredResult)

if y == DesiredResult:
    print("Success!")

我从程序中得到的输出如下:

b"I'm killing your brain like a poisonous mushroom"
b'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'
SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t

SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t

我相信你可以想象,这是令人沮丧的,因为这意味着当我走近时,我实际上并没有完成我的目标。

那么,如何修改此程序以确保转换的输出与变量DesiredResult完全相同?

我知道它与转换中出现的\n有关,但我不知道它是如何实现的,我不知道如何摆脱它。

任何和所有建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

base64 codec总是在末尾添加\n个字节。

  

将操作数转换为MIME base64(结果始终包含尾随'\ n')

要删除最后一个\n字节,请使用Python slicing operator,如下所示:

>>> y
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'
>>> DesiredResult
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t'
>>> y[:-1]
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t'
>>> y[:-1] == DesiredResult
True