在python中将字节字符串转换为字符串

时间:2012-07-06 10:29:17

标签: python bytestring

我正在使用PyCrypto和python 2.7.3。我试图在hash中添加一个常规字符串来创建一个链式哈希,但为了保持格式一致,我需要以'打印'形式而不是二进制形式的字符串s。有没有办法将二进制字符串转换为可操作的“普通”字符串?

from Crypto.Hash import SHA256
h = SHA256.new()
s = h.digest() #return binary "non-printable" digest

s
>>>"\xe3\xb0\xc4B\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99o\xb9$'\xaeA\xe4d\x9b\x93L\xa4\x95\x99\x1bxR\xb8U"
print(s)
>>> ã°ÄB˜üšûôÈ™o¹$'®Aäd›“L¤•™xR¸U

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

在交互式解释器中输入s时看到的是字符串的表示。你不应该担心这是什么样的 - 实际的字符串内容是你在使用print时打印的内容。使用print时无法将字符串“转换”为打印内容,因为已经的字符串已该内容。

答案 1 :(得分:1)

请尝试使用.hexdigest()。您将获得一个字符串表示形式为十六进制数字。

答案 2 :(得分:1)

不确定我是否正确,但如果你的意思是十六进制表示,你可以查看std-lib的binascii - 模块:

from binascii import b2a_hex #bin to ascii: hex-format
print b2a_hex(s)
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'

如果你只是想在s前加一个字符串,那就像Sven Marnach说的那样,不要打扰什么是 打印,只需将s附加到您的前缀,例如:

prefix = 'username:'
combined_string = prefix + s
相关问题