Чтение данных из ADTF 2 с использованием структур DDL - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь прочитать примерный файл 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 ]

0 голосов
/ 14 июня 2018

Существует также смещение данных и заголовки чанков, пожалуйста, посмотрите на 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 (которая поставляется с открытым исходным кодом и также может обрабатывать файлыиз 2.x) https://support.digitalwerk.net/adtf_libraries/adtf-file-library/html/index.html

Обе библиотеки поддерживают чтение и запись (ADTF) DAT-файлов, поэтому я думаю, что именно вам нужно, и не нужно заново изобретать.

Пожалуйста, имейтепример Media Descritpion: https://support.digitalwerk.net/adtf_libraries/adtf-streaming-library/v2/api/page_mediadescription.html

А также сам Reader: https://support.digitalwerk.net/adtf_libraries/adtf-streaming-library/v2/api/classadtfstreaming_1_1_i_a_d_t_f_file_reader.html

0 голосов
/ 07 июня 2018

Я не совсем понимаю, чего вы хотите достичь ... Прежде всего, вам не нужно никаких отступов в 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)

...