Получение ошибок для отрицательных чисел при манипулировании двоичными данными из файла.Какой самый подходящий способ справиться с этим? - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть некоторый код на С ++, который манипулирует двоичными данными для проприетарной системы хранения.Как часть этого, у меня есть этот код из 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 для чтения и обработки данных таким образом.

Есть ли правильный способ справиться с этим, будь то «питон» или дляиметь лучшую производительность?

...