2017-01-12 2 views

ответ

1

0x20 и 0x30 не игнорируются: а bytearray отформатирован как ASCII-символов и 0x20 случается ASCII-код пробела (), то же самое для 0x30, который отображает до нуля (0).

Это просто компактный способ представления двоичного массива. Вы можете прочитать все значения и их соответствующие символы в этом Wikipedia article.

В случае персонаж не печати, отформатированы как \x?? с ?? шестнадцатеричным кодом.

1

Они не игнорируются. 0x20 - код ASCII для пробела, 0x30 - это цифра 0. Оба они есть на выходе, после байта \x10.

То, что вы видите, представляет собой представление значения байтов, которое пытается быть максимально читаемым. Он делает это, отображая любой байт в диапазоне ASCII для печати как этот символ ASCII. Все, что не так представимо, показано либо как escape-последовательность или более короткий два символа \? (например, \n для новой строки или \t для символа табуляции).

Обратите внимание, что Python производит целочисленное значение для каждой нотной нотации ; это не что иное, как альтернативный синтаксис для получения того же целочисленного значения. Вы могли бы использовать десятичную нотацию или восьмеричную нотацию, и результат был бы таким же; вы ставите целые значения в объект list, из которого вы затем создаете объект bytearray. Оригинальный шестигранной обозначения не сохраняется в этом процессе:

>>> [0x10, 0x20, 0x30] 
[16, 32, 48] 
>>> bytearray([16, 32, 48]) 
bytearray(b'\x10 0') 
>>> [0o20, 0o40, 0o60] 
[16, 32, 48] 
>>> bytearray([0o20, 0o40, 0o60]) 
bytearray(b'\x10 0') 

Фактические значения в bytearray все еще целые числа в любом случае; если вы индекс в объект вы получите отдельные значения байт:

>>> ba = bytearray([0x10, 0x20, 0x30]) 
>>> ba 
bytearray(b'\x10 0') 
>>> ba[1] # 0x20, the space 
32 
>>> ba[2] # 0x30, the 0 digit 
48 
+0

Не могли бы вы также, возможно, показать мне, как лечить ByteArray в виде потока, например, при х = ByteArray ([0x10,0x20,0x30]) и х .read (1) = 16, x.read (1) = 32 – ritch

+0

@ritch: вместо этого используйте 'io.BytesIO()', если вам нужен поток байтов. –

+0

@ritch: so 'x = io.BytesIO (байты ([0x10, 0x20, 0x30]))', затем 'x.read (1)' и т. Д. –

Смежные вопросы