Hallo,
habe ein echtes Problem. Durchsuche das Internet / Foren schon seit einiger Zeit, aber habe bisher leider nichts passendes gefunden.
Ich habe eine Binärdatei. Diese muss ich auslesen. Allerdings bekomme ich "für den Menschen nicht lesbare Zeichen" als Ausgabe.
Ich denke, dass ich die Datei Byte-Weise auslesen und dann jeweils in das Format umwandeln muss. Aber wie?
Kann mir jemand weiterhelfen?
Danke schonmal!
anbei die Beiden Dateien : Binärview (so sieht's aus)
###z
#####:�S#�#�###H#�#4#�]*#:#�#��B�S#�#�###d#�#4#�]*#:#�#��J�S#�#####�#�#4#�]*#:#�#��R�S#�#####�#�#>#�]*#:#�#��Z�S#�#"###�#�#>#�]*#:#�#��b�S#�#"###�#�#H#�]*#:#�#��i�S#�#"###�#�#H#�]*#:#�#��q�S#�#"###�#�#R#�]*#:#�#��y�S#�#"###�#�#R#�]*#:#�#���S#�#"###�#�#\#�]*#:#�#���S#�#####�#�#\#�]*#:#�#���S#�#�###�#
und Textview (So soll's aussehen)
--------------------------------------------------------
-------------------------HEADER:------------------------
--------------------------------------------------------
0x00000006 (dwVersion)
1136070010 (dwAktTick_s)
36914 (dwPtrDataOldest)
50000 (dwDataCountValid)
1 (bFamNo)
50000 (dwDataCountMax)
--------------------------------------------------------
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x11,0x00,
--------------------------------------------------------
2 (wSampleRate_s)
--------------------------------------------------------
0x0011, 5120, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5122, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5301, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5121, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5123, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0013, 5302, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 22000, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5310, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5300, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 4364, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
--------------------------------------------------------
--------------------------DATEN:------------------------
--------------------------------------------------------
0: 5493050, 0x03FF,[ 210, 0, 328, 969, 820,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
1: 5493058, 0x03FF,[ 240, 0, 356, 968, 820,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
2: 5493066, 0x03FF,[ 270, 0, 403, 968, 820,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
3: 5493074, 0x03FF,[ 270, 0, 440, 967, 830,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
4: 5493082, 0x03FF,[ 290, 0, 450, 967, 830,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
5: 5493090, 0x03FF,[ 290, 0, 491, 967, 840,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
6: 5493097, 0x03FF,[ 290, 0, 497, 967, 840,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
Header (128 Byte):
4 Byte : <dwVersion> Version (Start mit 1, ...)
4 Byte : <dwAktTick_s> Zeitstempel des letzten Eintrags (256 ms-Tick!)
4 Byte : <dwPtrDataOldest> Pointer in DatenArray auf ältesten Eintrag (0..49.999)
4 Byte : <dwDataCountValid> Anzahl gültiger/genutzter Daten in Daten-Array (0..50.000)
1 Byte : <bFamNo> Lsb Familie (1..4) (seit <dwVersion> >= 3)
4 Byte : <dwDataCountMax> (seit <dwVersion> >= 4)
25 Byte : Reserve
2 Byte : Abtast-Zeit (in Sek.)
80 Byte : Datenbeschreibung*:
{
2 Byte : <wFlags>:
0x0001 : Aktiv(1) / Inaktiv(0)
0x0002 : Digital(1) / Analog(0)
0x0010 : internes Flag. Momentan immer gesetzt (Zugriff in lsb array)
...
2 Byte : <wId1>. Wenn 0x0010 in Flags gesetzt LSB Id
2 Byte : <wId2>. Wenn 0x0010 in Flags gesetzt LSB Wort Index (0..2)
2 Byte : Reserve
}= 8 Byte * 10 pro aufzuzeichnendem Signal = 80 Bytes
1 Byte : <bFlags>
2 Byte : <wMainId>
1 Byte : <bSubId>
1 Byte : <bDevNo>
1 Byte : <bFam>
2 Byte : Reserve
Daten (1.3 MB)
50.000 Einträge á 26 Byte mit folgendem Aufbau:
4 Byte : <dwTick_s> Zeitstempel (256 ms-Tick!)
2 Byte : <wValidFlags> 10 Valid-Flags für nachfolgende 10 Werte
(Bit 0 für Wert 1, Bit 9 für Wert 10)
20 Byte : <wData[10]> Daten. 10 Werte á 2 Byte (16 Bit)
habe ein echtes Problem. Durchsuche das Internet / Foren schon seit einiger Zeit, aber habe bisher leider nichts passendes gefunden.
Ich habe eine Binärdatei. Diese muss ich auslesen. Allerdings bekomme ich "für den Menschen nicht lesbare Zeichen" als Ausgabe.
Ich denke, dass ich die Datei Byte-Weise auslesen und dann jeweils in das Format umwandeln muss. Aber wie?
Kann mir jemand weiterhelfen?
Danke schonmal!
anbei die Beiden Dateien : Binärview (so sieht's aus)
###z
#####:�S#�#�###H#�#4#�]*#:#�#��B�S#�#�###d#�#4#�]*#:#�#��J�S#�#####�#�#4#�]*#:#�#��R�S#�#####�#�#>#�]*#:#�#��Z�S#�#"###�#�#>#�]*#:#�#��b�S#�#"###�#�#H#�]*#:#�#��i�S#�#"###�#�#H#�]*#:#�#��q�S#�#"###�#�#R#�]*#:#�#��y�S#�#"###�#�#R#�]*#:#�#���S#�#"###�#�#\#�]*#:#�#���S#�#####�#�#\#�]*#:#�#���S#�#�###�#
und Textview (So soll's aussehen)
--------------------------------------------------------
-------------------------HEADER:------------------------
--------------------------------------------------------
0x00000006 (dwVersion)
1136070010 (dwAktTick_s)
36914 (dwPtrDataOldest)
50000 (dwDataCountValid)
1 (bFamNo)
50000 (dwDataCountMax)
--------------------------------------------------------
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x11,0x00,
--------------------------------------------------------
2 (wSampleRate_s)
--------------------------------------------------------
0x0011, 5120, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5122, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5301, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5121, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5123, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0013, 5302, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 22000, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5310, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 5300, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
0x0011, 4364, 0, 0x00, 0x00 : (wFlags, wMainId, wSubId, bReserve[0], bReserve[1])
--------------------------------------------------------
--------------------------DATEN:------------------------
--------------------------------------------------------
0: 5493050, 0x03FF,[ 210, 0, 328, 969, 820,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
1: 5493058, 0x03FF,[ 240, 0, 356, 968, 820,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
2: 5493066, 0x03FF,[ 270, 0, 403, 968, 820,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
3: 5493074, 0x03FF,[ 270, 0, 440, 967, 830,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
4: 5493082, 0x03FF,[ 290, 0, 450, 967, 830,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
5: 5493090, 0x03FF,[ 290, 0, 491, 967, 840,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
6: 5493097, 0x03FF,[ 290, 0, 497, 967, 840,23948, 42, 58, 128,60350] (Tick, ValidFlag, Data[0]..[9])
Header (128 Byte):
4 Byte : <dwVersion> Version (Start mit 1, ...)
4 Byte : <dwAktTick_s> Zeitstempel des letzten Eintrags (256 ms-Tick!)
4 Byte : <dwPtrDataOldest> Pointer in DatenArray auf ältesten Eintrag (0..49.999)
4 Byte : <dwDataCountValid> Anzahl gültiger/genutzter Daten in Daten-Array (0..50.000)
1 Byte : <bFamNo> Lsb Familie (1..4) (seit <dwVersion> >= 3)
4 Byte : <dwDataCountMax> (seit <dwVersion> >= 4)
25 Byte : Reserve
2 Byte : Abtast-Zeit (in Sek.)
80 Byte : Datenbeschreibung*:
{
2 Byte : <wFlags>:
0x0001 : Aktiv(1) / Inaktiv(0)
0x0002 : Digital(1) / Analog(0)
0x0010 : internes Flag. Momentan immer gesetzt (Zugriff in lsb array)
...
2 Byte : <wId1>. Wenn 0x0010 in Flags gesetzt LSB Id
2 Byte : <wId2>. Wenn 0x0010 in Flags gesetzt LSB Wort Index (0..2)
2 Byte : Reserve
}= 8 Byte * 10 pro aufzuzeichnendem Signal = 80 Bytes
1 Byte : <bFlags>
2 Byte : <wMainId>
1 Byte : <bSubId>
1 Byte : <bDevNo>
1 Byte : <bFam>
2 Byte : Reserve
Daten (1.3 MB)
50.000 Einträge á 26 Byte mit folgendem Aufbau:
4 Byte : <dwTick_s> Zeitstempel (256 ms-Tick!)
2 Byte : <wValidFlags> 10 Valid-Flags für nachfolgende 10 Werte
(Bit 0 für Wert 1, Bit 9 für Wert 10)
20 Byte : <wData[10]> Daten. 10 Werte á 2 Byte (16 Bit)