Есть ли способ кодировать/декодировать шестнадцатеричный код, как в 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
Любая помощь приветствуется. Если я где-то был неясен, пожалуйста, скажите мне.