Чтение данных из ADTF 2 с использованием структур DDL
Я пытаюсь прочитать примерный файл ADTF. При чтении заголовка куска я вижу, что размер куска составляет 96 байт, вычитая длину заголовка (32), что оставляет нам 64 байта для фактических данных.
Теперь структура данных для потока говорит, что нам нужно только 43 байта для выражения данных. Я не уверен, как применять там отступы. Фактические 64 байта данных, кажется, имеют некоторое заполнение - я не могу просто прочитать данные и вставить их в структуры. Я не уверен, как угадать дополнительные размеры отступов. Все извлеченные значения должны быть равны 41 (десятичному).
<stream description="streamid_2" name="NESTED_STRUCT" type="adtf.core.media_type">
<struct bytepos="0" name="tNestedStruct" type="tNestedStruct"/>
</stream>
<struct alignment="1" name="tNestedStruct" version="1">
<element alignment="1" arraysize="1" byteorder="LE" bytepos="0" name="sHeaderStruct" type="tHeaderStruct"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="12" name="sSimpleStruct" type="tSimpleStruct"/>
</struct>
<struct alignment="1" name="tHeaderStruct" version="1">
<element alignment="1" arraysize="1" byteorder="LE" bytepos="0" name="ui32HeaderVal" type="tUInt32"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="4" name="f64HeaderVal" type="tFloat64"/>
</struct>
<struct alignment="1" name="tSimpleStruct" version="1">
<element alignment="1" arraysize="1" byteorder="LE" bytepos="0" name="ui8Val" type="tUInt8"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="1" name="ui16Val" type="tUInt16"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="3" name="ui32Val" type="tUInt32"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="7" name="i32Val" type="tInt32"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="11" name="i64Val" type="tInt64"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="19" name="f64Val" type="tFloat64"/>
<element alignment="1" arraysize="1" byteorder="LE" bytepos="27" name="f32Val" type="tFloat32"/>
</struct>
Вот 64 байта данных:
index = value (decimal)
0 = 3
1 = 43
2 = 0
3 = 0
4 = 0
5 = -57
6 = -120
7 = 31
8 = 0
9 = 0
10 = 0
11 = 0
12 = 0
13 = 0
14 = 0
15 = 0
16 = 0
17 = 41
18 = 0
19 = 0
20 = 0
21 = 0
22 = 0
23 = 0
24 = 0
25 = 0
26 = -128
27 = 68
28 = 64
29 = 41
30 = 41
31 = 0
32 = 41
33 = 0
34 = 0
35 = 0
36 = 41
37 = 0
38 = 0
39 = 0
40 = 41
41 = 0
42 = 0
43 = 0
44 = 0
45 = 0
46 = 0
47 = 0
48 = 0
49 = 0
50 = 0
51 = 0
52 = 0
53 = -128
54 = 68
55 = 64
56 = 0
57 = 0
58 = 36
59 = 66
60 = 0
61 = 0
62 = 0
63 = 0
2 ответа
Также есть смещение данных и заголовки чанков, пожалуйста, посмотрите на https://support.digitalwerk.net/adtf_libraries/adtf-streaming-library/v2/DATFileFormatSpecification.pdf
Но вам не нужно заботиться о формате индексированных файлов, чтобы использовать DDL вне ADTF Framework. Для этого в ADTF 2.x предусмотрена потоковая библиотека https://support.digitalwerk.net/adtf_libraries/adtf-streaming-library/v2/api/index.html
https://support.digitalwerk.net/adtf_libraries/adtf-streaming-library/v2/StreamingLibrary.pdf
В ADTF 3.x ADTF File Library (которая поставляется с открытым исходным кодом и может также обрабатывать файлы из 2.x) https://support.digitalwerk.net/adtf_libraries/adtf-file-library/html/index.html
Обе библиотеки поддерживают чтение и запись (ADTF)DAT-файлов, поэтому я думаю, что именно вам нужно, и не нужно изобретать заново.
Пожалуйста, ознакомьтесь с примером описания СМИ: https://support.digitalwerk.net/adtf_libraries/adtf-streaming-library/v2/api/page_mediadescription.html
А также сам Читатель: https://support.digitalwerk.net/adtf_libraries/adtf-streaming-library/v2/api/classadtfstreaming_1_1_i_a_d_t_f_file_reader.html
Я не совсем понимаю, чего вы хотите достичь... Прежде всего, вам не нужно заполнять какие-либо поля в DDL, байты следуют за предыдущим размером элемента. Вы должны знать, что Описание содержит сериализованную (bytepos, byteorder) и десериализованную структуру (выравнивание), пожалуйста, ознакомьтесь с https://support.digitalwerk.net/adtf/v2/adtf_sdk_html_docs/page_a_utils_indexedfileformat.html. Чтобы получить доступ к данным (чтение / запись), просто получите доступ через DDL ( https://support.digitalwerk.net/adtf/v2/adtf_sdk_html_docs/page_ddl_usage_howto.html), также посмотрите на пример ( https://support.digitalwerk.net/adtf/v2/adtf_sdk_html_docs/page_demo_media_desc_coder.html)