Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Binärdaten auslesen? (https://www.delphipraxis.net/17486-binaerdaten-auslesen.html)

Pseudemys Nelsoni 6. Mär 2004 19:41


Binärdaten auslesen?
 
hallö,

ich habe einige dateien, dort ist zum beispiel dieses hier:

Zitat:

IPA1  C}‹_
das hinterdem "IPA" ist die IP, nur wenn ich sie halt mit dem texteditor öffne(siehe quote) dann sind das unkenntliche zeichen, wie krieg ich denn daraus meine ip?

CalganX 6. Mär 2004 19:49

Re: Binärdaten auslesen?
 
Hi,
schau dir am Besten mal das Binär-Daten-Tutorial auf www.delphi-source.de an. ;)

Chris

Pseudemys Nelsoni 12. Sep 2004 13:20

Re: Binärdaten auslesen?
 
hallo,

das hilft mir irgendwie nicht weiter... ich weiss zwar wie ich in delphi meine eigenen sachen speicher (file of tmytype...) und wieder auslese.... aber ka wie ich eine fremde datei auslese.
hat sonst noch jemand ne idee wie ich aus einer binären datei den TEXT rausbekomme der im binären format vorliegt?

Luckie 12. Sep 2004 13:23

Re: Binärdaten auslesen?
 
Wenne s sich um eine typisierte Datei handlet, wird dir nichts anderes übrigbleiben, als den Aufbau zu ermitteln. Entweder selbest oder in dem du den Autor fragst.

Sharky 12. Sep 2004 13:24

Re: Binärdaten auslesen?
 
Ich würde die Datei ersteinmal in einen Stream laden und mir dann die Einzelnen Bytes ansehen (HEX-Editor).
Dann kannst Du versuchen zu analysieren wie die IP in der Datei gespeichert wird und sie dann entsprechend aus dem Stream lesen.

scp 12. Sep 2004 13:29

Re: Binärdaten auslesen?
 
Wenn die Datei nicht gross ist kannst du sie ja mal hier anhängen.

Pseudemys Nelsoni 16. Sep 2004 15:56

Re: Binärdaten auslesen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi scp,

hier ist so eine datei...
es ist eine Ethereal log datei, in ihr sind die daten die ein Spiel an den server sendet... solche daten wie "units gekillt" "units build" "time" usw nur liegen die halt binär vior und mit nem hexeditor bin ich nicht gerade gut...

ich häng sie mal an.

Hoffe du kannst mir sagen wie ich an die werte komme ;)

Denk dran das es nicht wirklich eine .txt datei ist, ich musste sie hier nur umbenennen weil keine dateien ohne endung erlaubt sind.

scp 17. Sep 2004 01:12

Re: Binärdaten auslesen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mir mal die Mühe gemacht, mir das anzugucken. Die Datei ist relativ simpel aufgebaut.

Code:
Aufbau der Datei:
05 98       = 2 Bytes (Word) = 1432 = Grösse Datensatz/Datei
00 00       = 2 Bytes (Word) = 0

1. Eintrag
53 49 44 23 = 4 Bytes (DWord) = SID# = Tag
00 07       = 2 Bytes (Word) = 7 = Typ (2 = ByteBool, 6 = Zahl, 7 = String)
00 21       = 2 Bytes (Word) = 33 = Grösse Eintrag
........... = Hier folgt der Inhalt, in dem Fall der String
8B D1 77    = 0 bis 3 Bytes, evtl. um Position des nächsten Tags "einzurücken"

2. Eintrag
53 45 52 23 = 4 Bytes (DWord) = SER# = Tag
00 07       = 2 Bytes (Word) = 7 = Typ (2 = ByteBool, 6 = Zahl, 7 = String)
00 17       = 2 Bytes (Word) = 23 = Grösse Eintrag
........... = Hier folgt der Inhalt, in dem Fall der String
00          = 0 bis 3 Bytes, evtl. um Position des nächsten Tags "einzurücken"

3. Eintrag
49 44 4E 4F = 4 Bytes (DWord) = IDNO = Tag
00 06       = 2 Bytes (Word) = 6 = Typ (2 = ByteBool, 6 = Zahl, 7 = String)
00 04       = 2 Bytes (Word) = 4 = Grösse Eintrag
07 D3 84 D1 = Der Inhalt, in dem Fall die Zahl

usw.
Anbei ein Beispielcode, enthält noch keine Fehlerüberprüfungen, klappt aber schon mit der Datei.
Die Grundarbeit des Code besteht eigentlich nur darin, die Tags durch eine Schleife Schritt für Schritt abzuarbeiten und je nach Datentyp eine Infozeile in die Listbox reinzuhauen.

EDIT:
- Benötigt wird ein neues Projekt mit 1 Button und 1 ListBox.
- Unbekannte aber in der Datei vorhandene Datentypen: 0x0001, 0x0005, 0x0014

Pseudemys Nelsoni 17. Sep 2004 02:27

Re: Binärdaten auslesen?
 
hallo scp,

wow, funktioniert einwandfrei wie kann ich mich nur bei dir bedanken? :thumb:

Sauber!

Vielen dank für die mühe! 8)

kannst du mir noch einige dinge erklären?

was tun diese dinge z.b(ich wusste nichtmal das man da hexwerte im array haben kann):

Zitat:

array[0..$400-1-4] Of Char);
oder hier:

Zitat:

function BE_LE16(Value : Word) : Word;
begin
result := ((Value and $FF00) shr 8) +
((Value and $00FF) shl 8);
end;

function BE_LE32(Value : DWord) : DWord;
begin
result := ((Value and $FF000000) shr 24) +
((Value and $00FF0000) shr 8) +
((Value and $0000FF00) shl 8) +
((Value and $000000FF) shl 24);
end;
hört sich alles ziemlich schwierig an

scp 17. Sep 2004 02:36

Re: Binärdaten auslesen?
 
Binärdaten kann man einfach gut in ein array [0..x] Of Char einlesen, weil man dann Teile der Daten über den Index bekommt. Und da der array mit 0 beginnt, kann man ihn auch ohne weiteres als nullterminierten String verwenden (wenn eben ein solcher aus der Datei ausgelesen wurde).

Zu den beiden Funktionen: Diese drehen die Anordung der Bytes um, google einfach mal nach Bei Google suchenBig Endian Little Endian, da findest du dann Erklärungen, warum es zwei verschiedene Anordnungen für Bytes, vor allem bei Zahlen, gibt.

Pseudemys Nelsoni 17. Sep 2004 02:40

Re: Binärdaten auslesen?
 
Danke, ich such da mal :)

Garfield 18. Nov 2004 11:35

Re: Binärdaten auslesen?
 
Entschuldigt bitte, wenn ich den Thread noch mal rauskrame.

Zitat:

Zitat von scp
Code:
...
00 07       = 2 Bytes (Word) = 7 = Typ (2 = ByteBool, 6 = Zahl, 7 = String)
...

Gibt es dafür möglicherweise eine Referenz?

Hintergrund: Ich möchte gern beim TMPG Encoder die CurrentCfg.tpr, welche beim Beenden des TMPG Encoder automatisch gespeichert wird, direkt laden. Sonst muss die Projekt Datei erst als Textdatei gespeichert werden. Im Projekt gibt es unter anderem Boolean (08 False, 09 True) und mit <> eingeschlossene Strings (0e).

Garfield 20. Nov 2004 09:13

Re: Binärdaten auslesen?
 
Hat sich erledigt.

scp 24. Nov 2004 10:31

Re: Binärdaten auslesen?
 
Hast du einen Weg gefunden? Ich hätte nämliche eine komplett nachgebaute TMPGEnc-Klasse mit Lade-Funktion (.tpr, Batch-Liste, Template usw.).

Garfield 24. Nov 2004 12:13

Re: Binärdaten auslesen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von scp
Hast du einen Weg gefunden? Ich hätte nämliche eine komplett nachgebaute TMPGEnc-Klasse mit Lade-Funktion (.tpr, Batch-Liste, Template usw.).

Ich habe mir eine Unit mit einer Function zur Konvertierung von Binär zu Text geschrieben. Das heißt, die Binärdatei wird in einen TFileStream geladen, byteweise gelesen und in das Format der Text Projektdatei konvertiert und in diesem Format gespeichert. Der Function werden die Dateinamen der Quelle und des Zieles übermittelt. Wenn bis zum Ende kein Fehler aufgetreten ist, gibt die Function True zurück. Bisher habe ich die Text Projektdatei verwendet. Mit der Konvertierung kann ich sofort die CurrentCfg.tpr laden, konvertieren und wie jetzt mit der Textdatei weiterarbeiten.

Da ich programmieren autodidaktisch lerne, dürfte meine Umsetzung nicht allzu elegant sein. Deshalb interessiert mich Deine Klasse. Meine Unit hänge ich mal an. :|

scp 24. Dez 2004 01:06

Re: Binärdaten auslesen?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Falls noch einer Interesse hat:
Hier die TMPGEnc Klasse und der Binär -> Text Converter

Evtl. lassen sich die Projekte nicht einwandfrei kompilieren, da ich sie länger nicht bearbeitet habe.
Die Klasse selbst funktioniert auf jeden Fall, das TMPGTest Projekt benötigt JVCL wegen dem Inspector.

Die Klasse befindet sich im include-Ordner der TMPGTest.rar


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz