Они не игнорируются. 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
Не могли бы вы также, возможно, показать мне, как лечить ByteArray в виде потока, например, при х = ByteArray ([0x10,0x20,0x30]) и х .read (1) = 16, x.read (1) = 32 – ritch
@ritch: вместо этого используйте 'io.BytesIO()', если вам нужен поток байтов. –
@ritch: so 'x = io.BytesIO (байты ([0x10, 0x20, 0x30]))', затем 'x.read (1)' и т. Д. –