Python: преобразование байтового массива в странные результаты байтовой строки - PullRequest
1 голос
/ 17 июня 2020

Я добавляю число 33 к байтовому массиву, что отлично работает, но когда я конвертирую байтовый массив в байтовую строку, число 33 преобразуется в восклицательный знак (!).

Пример кода ниже:

f_bytes = bytearray(b"\xFF\xFF")

f_bytes.append(3)
f_bytes.append(33)
f_bytes.append(12)

byte_msg = bytes(f_bytes)

print(byte_msg)
print (''.join(format(x, '02x') for x in f_bytes))

Вот результат:

b'\xff\xff\x03!\x0c'
ffff03210c

Я ожидаю, что байтовая строка будет выглядеть как байтовый массив, но это не так, может кто-нибудь помочь мне разобраться в проблеме?

1 Ответ

0 голосов
/ 17 июня 2020

0x00 - 0x1f, 0x7F и 0xFF таблицы ASCII являются управляющими символами, которые управляют вводом / выводом терминала. Обычно они не печатаются в небинарном строковом представлении (в вашей оболочке они могут отображаться как что-то вроде ^C, ^M или ^[[C ..). В отличие от других байтов 0x33 соответствует литералу, который печатается в строке. Во второй команде print вы отключаете преобразование в литерал восклицательного знака, используя строку формата, таким образом вы получаете шестнадцатеричное значение для всех байтов.

...