У меня есть некоторый код на С ++, который манипулирует двоичными данными для проприетарной системы хранения.Как часть этого, у меня есть этот код из c ++ (имена переменных изменены для ясности):
void get_data(unsigned char* data) {
data[0] = (~data[0] ^ 0x55);
Где data
было прочитано прямо из двоичного файла.
Эта логика была обработананичего не меняя и использование битовыми операторами в python означает, что я могу просто скопировать код.
data = bytearray(fd.read(2048))
data[0] = (~data[0] ^ 0x55)
И исключение составляет ValueError: byte must be in range(0, 256)
.Это связано с тем, что первое значение байта 34
получает двойное дополнение -35
.
Я не уверен в правильном способе справиться с этим.В c ++ char имеет ТОЛЬКО 0-255.В Python этого нет, поэтому я каким-то образом обрабатываю его как неподписанное целое или есть более подходящий способ обработки?
Одна идея состояла в том, чтобы взять каждый байт и:
byte_value = byte_value & 0xff
Другой человек предложил мне использовать тип ctypes.c_ubyte
.Затем я вспомнил две вещи, с которыми я экспериментировал в прошлом.struct
чтобы вытащить числа и сохранить их должным образом или модуль bitstring
для чтения и обработки данных таким образом.
Есть ли правильный способ справиться с этим, будь то «питон» или дляиметь лучшую производительность?