У меня есть объект python3 bytes
(сгенерированный с использованием struct.pack
или to_bytes
), который я хочу преобразовать в объект str
. Обратите внимание, что использование bytes.encode("ascii")
здесь не работает, потому что оно откажется от преобразования непечатаемых символов.
Как я могу это сделать?
Я пытаюсь преобразовать целое число в двоичное представление в объекте str
, так что 11
будет представлен как "\x00\x00\x00\x0b"
(обратите внимание, что это объект str
, а не bytes
).
То, что я сейчас делаю, работает хорошо для младших целых чисел, у которых нет байтов 0x80
или выше:
In [94]: i = 11
In [95]: i.to_bytes(2, 'big')
Out[95]: b'\x00\x0b'
In [96]: i.to_bytes(2, 'big').decode('ascii')
Out[96]: '\x00\x0b'
Однако он разбивается для целых чисел, которые будут представлены с использованием MSbit байта:
In [97]: i = 250
In [98]: i.to_bytes(2, 'big')
Out[98]: b'\x00\xfa'
In [99]: i.to_bytes(2, 'big').decode('ascii')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-100-d5fe6014b48a> in <module>
----> 1 i.to_bytes(2, 'big').decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xfa in position 1: ordinal not in range(128)
Как преобразовать i = 250
в "\x00\xfa"
?
Спасибо!
PS
Причина в том, что функция, которую я хочу вызвать, ожидает str
объект, а не объект bytes
, я понимаю, что это не намеченная цель объектов pyton3 str
(и ценю разделение между str
и bytes
), однако это все еще то, что я sh хочу выполнено sh здесь.