#python #c #python-3.x #cbor
Вопрос:
Итак, у меня есть эта штука
{'apn': 'censored', 'support_data_mode': False, 'data_usr_name': 'censored', 'data_password': 'censored'}
Когда я читаю эти данные из системы, которая использует NanoCBOR, я получаю что-то вроде этого
b'xbfcapnjcensoredqsupport_data_modexf4mdata_usr_namedcensoredmdata_passworddcensoredxff'
и я могу расшифровать его в Python 3 и получить правильный результат. Но когда я пытаюсь закодировать его обратно, это выглядит так
b'xa4capnjcensoredqsupport_data_modexf4mdata_usr_namedcensoredmdata_passworddcensored'
и система не принимает его обратно как действительное сообщение.
А перепробовал все библиотеки Python cbor, cbor2 Флинна и флинна.
Документация скудна, и я не знаю, что делать, чтобы закодировать ее в правильном формате.
Комментарии:
1. Похоже, они оба правы. NanoCBOR использует xbf для обозначения карты неопределенной длины, затем xff для обозначения конца карты. Python использует xa4 для обозначения карты, на которой есть ровно 4 объекта, поэтому в конце не требуется xff. Оба являются правильными форматами CBOR. Вы должны увидеть, что не так с вашей системой NanoCBOR.
2. @Marcin Szymczyk — Ответ должен быть опубликован как Ответ, а не отредактирован в вопросе.
Ответ №1:
Я нашел ответ. Да, оба формата верны, но дело было не в этом. Проблема заключалась в том, как создать xbf
своего рода карту на python. И я это сделал!
from flunn import dumps, loads, mapping
dump_map = [('device_id', 1), ('power_status', 1)]
payload = dumps(mapping((a for a in dump_map)))
В результате получается:
b'xbfidevice_idx01lpower_statusx01xff'
Теперь формат такой, как я хотел, и система приняла его как действительный.