Распаковать De c из Hex - через битовые смещения - PullRequest
0 голосов
/ 19 марта 2020

У меня есть блок шестнадцатеричных данных, который включает в себя настройки датчика, я включу начальный фрагмент шестнадцатеричного кода (сначала LSB):


F501517 C 8150D4DE 04010200 70010101 05F32A04 F4467000 00000AFF 0502D402


Из документации следует декодировать этот гекс в de c:

3.1. Полный идентификатор и настройки запись (0x7 C)

Offset   Length (bytes)    Field description

0x00     6                 Full identifier
0x06     40                Settings

3.1.1 Полный идентификатор

Offset      Field description

0x00        Product Type
0x01        Device Type
0x02        Software Major Version
0x03        Software Minor Version
0x04        Hardware Major Version
0x05        Hardware Minor Version

3.1.2 Настройки

Offset   Length(bit)   Offset(bit)  Default value   Min   Max     Field Description
0x00     8             0            0               0     255     Country number
0x01     8             0            0               0     255     District number
0x02     16            0            0               0     9999    Sensor number
...
0x27

Это единственная информация, которую я должен расшифровать. Столбец смещения должен быть уловкой для понимания этого.

  1. Каковы смещения шестнадцатеричных значений?
  2. В первой шестнадцатеричной строке я вижу 7 C.
  3. В разделе «Настройки» отображается значение 0x27 = 39 в десятичная дробь, которая указана в разделе 3.1 как длина 40.

1 Ответ

1 голос
/ 20 марта 2020

Заданные шестнадцатеричные байты равны смещению байтов от начала данных.

Предполагая, что ваш заданный дамп имеет двоичный порядок с прямым порядком байтов, давайте посмотрим:

Value in dump - separated in bytes - bytes in memory
F501517C      - F5 01 51 7C        - 7C 51 01 F5
8150D4DE      - 81 50 D4 DE        - DE D4 50 81
04010200      - 04 01 02 00        - 00 02 01 04

Теперь давайте назначим их полям. В следующем списке обе записи объединены.

Byte  Offset      Field description

7C    0x00        Product Type
51    0x01        Device Type
01    0x02        Software Major Version
F5    0x03        Software Minor Version
DE    0x04        Hardware Major Version
D4    0x05        Hardware Minor Version

Byte  Offset   Length(bit)   Offset(bit)  Default value   Min   Max     Field Description
50    0x00     8             0            0               0     255     Country number
81    0x01     8             0            0               0     255     District number
00,02 0x02     16            0            0               0     9999    Sensor number

Независимо от того, имеет ли смысл результат, ваше решение:

  • Тип продукта = 0x7 C
  • Устройство Тип = 0x51 = 81 десятичный (также может быть ASCII 'Q')
  • Software Major.Minor Version = 0x01.0xF5 = 1.245 десятичный
  • Hardware Major.Minor Version = 0xDE.0xD4 = 222.212
  • Номер страны = 0x50 = 80 десятичных знаков (также может быть ASCII 'P')
  • Номер района = 0x81 = 129 десятичных знаков (возможно, 0x01 = 1 с установленным битом 7?)
  • Номер датчика = 0x0002 = 2 десятичных знака (предполагается, что используется старший порядковый номер)
...