Поскольку ответа пока нет, я пытаюсь ответить на мой вопрос по частям (по мере его изучения):
Во-первых, индекс SDNA
, указанный в блоке файла, кажетсябыть индексом типа в таблице STRC
.Однако номер типа типа с индексом 0 равен 12. Это фиксированное смещение (12) продолжается до индекса 12, где тип равен 26. Так что на самом деле вам нужна другая таблица ( инвертированный индекс ) соответствует номеру типа индексу типа в таблице STRC
.
Поскольку первый номер типа в этой таблице равен 12, онкажется, что первые двенадцать типов типов используются для этих примитивных типов: char
, uchar
, short
, ushort
, int
, long
, ulong
, float
, double
, int64_t
, uint64_t
, void
Однако эти типы не существуют в STRC
.Таким образом, тип № 2 отсутствует в инвертированном индексе, поэтому он должен быть примитивным (не составным) типом.
К сожалению, существуют исключения из приведенных выше правил: типы полей в STRC
не является (как и индекс SDNA) индексом в SDNA
, а является номером типа , поэтому вам нужно использовать инвертированный индекс там.При использовании рекурсивной подпрограммы для декодирования (как и я) подпрограмма должна знать, обрабатывает ли « индекс типа » или « номер типа ».