Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Seite 1 von 2  1 2      

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