Первые 3 байта представляют собой строку ASCII с серийным кодом устройства [63, 67, 62]
Следующие 4 байта представляют собой 32-битное целое число (с прямым порядком байтов!) [127, 106, 241, 65]
Следующее 2 байта представляют собой две 8-битные переменные [219] [249]
Следующие 4 байта представляют собой фиксированное десятичное число BCD [02, 03, 05, 03] (т.е. 23,53).
Следующие 2 байта пусты [255, 255]
Следующие 3 байта представляют собой 8-битные переменные с настройки однобитового флага [01, 01, 03]
Теперь... Некоторые из них я знаю, а некоторые являются догадками, что в моем случае не имеет значения, потому что я ищу всего около 3 переменных. Идея состоит в том, что я сбрасываю чип памяти, изменяю значения и загружаю его обратно.
Работать с такими перепутанными байтами раздражает. Различные типы данных, длины, порядок байтов и т. д. Мне бы хотелось, чтобы это был какой-то класс сопоставления, куда я мог бы поместить свой массив, а затем определить карту пространства памяти для переменных Python. Возможно, мне придется добавить функцию get/set для некоторых странных функций, таких как BDC с десятичной точкой, но это нормально.
Я представляю, что это выглядит так (изменение последовательного кода в первых 3 байтах):
Я работаю с блоком данных, сброшенным с микросхемы EEPROM. Я занимаюсь реверс-инжинирингом. Я прочитал его в Python как массив (это фрагмент примера): [code]my_array = [63, 67, 62, 127, 106, 241, 65, 219, 249, 02, 03, 05, 03, 255, 255, 01, 01, 03] [/code] Например, я знаю, что: [list] [*]Первые 3 байта представляют собой строку ASCII с серийным кодом устройства [63, 67, 62] [*]Следующие 4 байта представляют собой 32-битное целое число (с прямым порядком байтов!) [127, 106, 241, 65] [*]Следующее 2 байта представляют собой две 8-битные переменные [219] [249] [*]Следующие 4 байта представляют собой фиксированное десятичное число BCD [02, 03, 05, 03] (т.е. 23,53). [*]Следующие 2 байта пусты [255, 255] [*]Следующие 3 байта представляют собой 8-битные переменные с настройки однобитового флага [01, 01, 03] [/list] Теперь... Некоторые из них я знаю, а некоторые являются догадками, что в моем случае не имеет значения, потому что я ищу всего около 3 переменных. Идея состоит в том, что я сбрасываю чип памяти, изменяю значения и загружаю его обратно. Работать с такими перепутанными байтами раздражает. Различные типы данных, длины, порядок байтов и т. д. Мне бы хотелось, чтобы это был какой-то класс сопоставления, куда я мог бы поместить свой массив, а затем определить карту пространства памяти для переменных Python. Возможно, мне придется добавить функцию get/set для некоторых странных функций, таких как BDC с десятичной точкой, но это нормально. Я представляю, что это выглядит так (изменение последовательного кода в первых 3 байтах): [code]my_array = [63, 67, 62, 127, 106, 241, 65, 219, 249, 02, 03, 05, 03, 255, 255, 01, 01, 03]
my_map = {### some mapping of variable names, their length, type, etc###}
[61, 62, 63, 127, 106, 241, 65, 219, 249, 02, 03, 05, 03, 255, 255, 01, 01, 03] [/code] Есть ли разумный способ сделать это? Может быть, библиотека/инструмент для этого?