Из-за отсутствия лучшей формулировки я использовал «необработанные байты» для обозначения bytearray(b'\xDE\xAD\xBE\xEF')
, а не «без необработанных байтов» как bytearray(b'DEADBEEF')
.
Я поддерживаю кодовую базу, которая выполняет различные манипуляции с байтами для bytearray()
параметров. Чтобы они работали правильно, они должны быть «сырыми байтами». Краткий пример, почему это важно:
raw_b = bytearray(b'\xde\xad\xbe\xef')
raw_b.reverse()
print(raw_b) -> bytearray(b'\xef\xbe\xad\xde')
не то же самое, что
b = bytearray(b'DEADBEEF')
b.reverse()
print(b) -> bytearray(b'FEEBDAED')
И есть много других вещей, которые идут не так, как индексация значений и т. д.
И raw_b
, и b
в приведенном выше примере относятся к типу bytearray
, поэтому ввод bytes
мне не помогает. Функции, которым требуются эти необработанные байты, в настоящее время имеют следующую конструкцию повсюду, чтобы гарантировать, что параметр действительно находится в необработанных байтах.
try:
value = binascii.unhexlify(param)
except binascii.Error:
#already raw bytes
pass
Как мне вводить необработанные байты, чтобы избавиться от этого мусора?
b'A'
— это полная последовательность, а не отдельное целое число!b'A'[0] == 0x41
верно, как иb'A' == bytes([0x41])
. - person Martijn Pieters   schedule 04.12.2018byte(s)
. Теперь я понимаю, что вы говорите, спасибо. - person ixje   schedule 04.12.2018