Python将class <str>转换为class <bytes>

时间:2018-11-05 20:04:10

标签: python arrays string byte bytestring

我在类中有这个字符串值:

key = "b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"

我希望将其转换为类

key = b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'

我将如何在Python中做到这一点?任何人都将不胜感激。

2 个答案:

答案 0 :(得分:1)

key的提供者应该固定为存储值,而不是字节的表示

无论如何,要撤消该操作,可以使用相反的方式,即ast.literal_eval

import ast

key = r"b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"
print(ast.literal_eval(key))

打印:

b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'

请注意,我必须在key字节文字上使用原始前缀,该前缀可能与您拥有的输入数据匹配。

此修补程序不能替代整个链的适当修补程序:转换为表示形式并将其解析回CPU方面的成本较高。

答案 1 :(得分:0)

如果您的key变量的值实际上是"b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"(而不是@@Jean-FrançoisFabre的答案所假定的r"b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'"),则可以使用int.to_bytes来转换字符除去前两个字符和后两个字符(分别是keyb'之后,'中的字节数:

b''.join(ord(c).to_bytes(1, 'big') for c in key[2:-1])

这将返回:

b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'