Я использую библиотеку Python для беспроводной связи ANT+ с датчиками. Связь осуществляется путем сопряжения с идентификатором, который представляет собой число из 4-5 цифр. Все работало нормально, пока одно из протестированных мной устройств не получило идентификатор «00625».
Отслеживая код, источником проблемы является функция упаковки/распаковки структуры, используемая для кодирования и декодирования байтов сообщения протокола ANT+.
>>> from struct import *
>>> pack(b'<H', 11977)
'\xc9.'
>>> unpack(b'<H', '\xc9.')
(11977,)
>>> pack(b'<H', 625)
'q\x02'
>>> unpack(b'<H', 'q\x02')
(625,)
>>> pack(b'<H', 00625)
'\x95\x01'
>>> unpack(b'<H', '\x95\x01')
(405,)
Итак, когда я упаковываю ANT ID 11977 или 625, а затем распаковываю их, я получаю именно то, что упаковывал.
Однако, когда я упаковываю ANT ID 00625, а затем распаковываю его, я получаю обратно 405. Не знаю, как мне с этим справиться, чтобы правильно упаковать 00625.
struct.error: cannot convert argument to integer
. - person jftorre   schedule 13.03.202000625
в нем? - person martineau   schedule 13.03.20200o
все еще существует. В любом случае, как вы вообще вставили это целое число в свой код? В конечном счете проблема в этом, а не вstruct.pack
. Если он приходит в виде строки, вы должны использоватьint()
, а неeval()
, иraw_input()
вместоinput()
. - person wjandrea   schedule 13.03.2020