Как преобразовать байты в битстирнг - PullRequest
0 голосов
/ 15 мая 2019

У меня есть цепочка битов, которую я закодировал с помощью функции ниже, когда я пытаюсь декодировать с помощью своей функции, она не работает. что я могу сделать?

def bitstring_to_bytes(self,s):
    return int(s, 2).to_bytes(len(s) // 8, byteorder='big')

def bytes_to_string(self,xbytes):
    return xbytes.from_bytes(xbytes, 'big')

1 Ответ

0 голосов
/ 15 мая 2019

(более или менее) аналогично тому, как тип int знает, как преобразовать целочисленный экземпляр в байты, снова int знает, как преобразовать байты обратно в целое число.

Ваша переменная xbytes является объектом bytes, поэтому она не знает, как преобразовать себя в целое число.

Вместо этого вы делаете это так:

intermediate_result = int.from_bytes(xbytes, byteorder='big')

(И после этого вы захотите преобразовать его в строку из 0 и 1.)

Причина, по которой он не является полностью ортогональным (при преобразовании вперед вы используете value.method() и при обратном преобразовании вы используете type.method(value)) заключается в том, что в прямом случае ваше значение уже имеет тип, который знает, как преобразовать себя, но в обратном случай, ваше значение другого типа, который не знает, как конвертировать обратно.

Вы также можете думать об этом на английском языке, если вам нравится:

value.to_bytes(byteorder='big')

будет Преобразовать это целочисленное «значение» в объект байтов .

int.from_bytes(value, byteorder='big')

будет Создать новый целочисленный объект из байтов "value" .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...