Python Преобразование класса <str>в класс <bytes> - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть это строковое значение с классом:

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 голосов
/ 05 ноября 2018

Если значение вашей переменной key буквально "b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'" (а не r"b'\x81*u\x11\xe8k\xef\xbc\xc6\xef\x9d\x83\x9f!\x0ej'", что предполагает ответ @ Jean-FrançoisFabre), вы можете использовать int.to_bytes для преобразования символов в key в байты после удаления первые два и последние символы (b' и '):

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'
0 голосов
/ 05 ноября 2018

поставщик 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 байта литерала, который, вероятно, соответствует входным данным, которые у вас есть.

Это исправление не заменяет правильное исправление всей цепочки: преобразование в представление и его разбор требует затрат на ЦП.

...