AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Binärdaten auslesen?

Ein Thema von Pseudemys Nelsoni · begonnen am 6. Mär 2004 · letzter Beitrag vom 24. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Binärdaten auslesen?

  Alt 6. Mär 2004, 20:41
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?
Mario
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Binärdaten auslesen?

  Alt 6. Mär 2004, 20:49
Hi,
schau dir am Besten mal das Binär-Daten-Tutorial auf www.delphi-source.de an.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Binärdaten auslesen?

  Alt 12. Sep 2004, 14:20
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?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Binärdaten auslesen?

  Alt 12. Sep 2004, 14:23
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Binärdaten auslesen?

  Alt 12. Sep 2004, 14:24
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#6

Re: Binärdaten auslesen?

  Alt 12. Sep 2004, 14:29
Wenn die Datei nicht gross ist kannst du sie ja mal hier anhängen.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: Binärdaten auslesen?

  Alt 16. Sep 2004, 16:56
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.
Angehängte Dateien
Dateityp: txt datei.txt (1,4 KB, 39x aufgerufen)
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#8

Re: Binärdaten auslesen?

  Alt 17. Sep 2004, 02:12
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
Angehängte Dateien
Dateityp: pas unit1_283.pas (3,9 KB, 30x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9

Re: Binärdaten auslesen?

  Alt 17. Sep 2004, 03:27
hallo scp,

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

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
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#10

Re: Binärdaten auslesen?

  Alt 17. Sep 2004, 03:36
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz