Есть ли способ кодировать/декодировать шестнадцатеричный код, как в Python 2?

Резюме: я создаю проект, используя Wii Balance Board и Python. Я нашел модуль для использования в GitHub. К сожалению, он написан на Python 2. Я исправил код с помощью 2to3, за исключением того, что не смог найти обходной путь для таких функций, какx.decode('hex')илиx.encode('hex')

Входные данные с платы представляют собой что-то вроде (пример), и я думаю, что мне придется преобразовать их в строки, чтобы это работало.

Я пробовал binascii.b2a() , codecs.getdecoder() и bytes.fromhex()

Ожидания и то, что произошло:* Ожидаемый результат — получение строки шестнадцатеричных байтов (\xa1 \x00\x00\x02\x00\x00\xbeнапример), а затем использовать их в данном коде:

      INPUT_STATUS = 20
INPUT_READ_DATA = 21
EXTENSION_8BYTES = 32
#(...)
data = self.receivesocket.recv(25)
intype = int(data.encode("hex")[2:4])
if intype == INPUT_STATUS:
  self.setReportingType()
elif intype == INPUT_READ_DATA:
  if self.calibrationRequested:
  packetLength = (int(str(data[4]).encode("hex"), 16) / 16 + 1)
  self.parseCalibrationResponse(data[7:(7 + packetLength)])

  if packetLength < 16:
    self.calibrationRequested = False
    elif intype == EXTENSION_8BYTES:
    self.processor.mass(self.createBoardEvent(data[2:12]))
  else:
    print("ACK to data write received")

Результат, который я получаю:

      #using fromhex:
  File "wiboard2.py", line 37, in decode
    val = bytes.fromhex(str(n))
ValueError: non-hexadecimal number found in fromhex() arg at position 1

#using binascii:
  File "wiboard2.py", line 38, in decode
    return binascii.b2a_hex(n[1:].replace(" ", "").replace("\\", "").replace("x", ""))
TypeError: a bytes-like object is required, not 'str'

#this may not help, i've done some editing that won't make it work; but it gives the same error without the "replace"s

Любая помощь приветствуется. Если я где-то был неясен, пожалуйста, скажите мне.

0 ответов

Другие вопросы по тегам