AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Tutorial Arbeiten mit Dateien auf binärer Ebene
Thema durchsuchen
Ansicht
Themen-Optionen

Tutorial Arbeiten mit Dateien auf binärer Ebene

Ein Thema von Fehlersucher · begonnen am 22. Jan 2013 · letzter Beitrag vom 3. Feb 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

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

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 23. Jan 2013, 09:10
Suchst du eventuell so was?
http://michael-puff.de/Programmierun...exLoader.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Fehlersucher

Registriert seit: 10. Nov 2012
32 Beiträge
 
#2

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 27. Jan 2013, 13:50
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 27. Jan 2013, 13:53
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.

Gruß
Häh? Das ist doch nur eine andere Schreibweise (im Dualsystem).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#4

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 27. Jan 2013, 14:07
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.
Es gibt keine "Einsen" und "Nullen" in einer Datei (oder im RAM oder ..), sondern nur bits - und deren Wert ist als 1 (gesetzt) oder 0 (ungesetzt) definiert - aber eben auch nur definiert.

Die Darstellung eines Bytes (zB) als binär "00110001" oder Hex "31" oder dezimal 49 ist doch nur für uns doofe Menschen so gebräuchlich, weil wir sonst garnichts kapieren würden.

Wenn Du in einem String die Darstellung der Werte der bits als "0" und "1" haben möchtest, dann mußt du die Werte der einzelnen Bits in chars "0" bzw. "1" umwandeln und in den String schreiben. Gut dir eine/deine Datei in einen HexEditor an, dann siehst Du, was gemeint ist.

Wenn Du in dem String aber die Werte der Bytes haben möchtest, brauchst du doch nur das Eingelesene in den String schieben oder gleich in einen String einlesen oder eine Typumwandlung in String machen (unter Beachtung des Längensetzens des Strings).
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 27. Jan 2013, 14:20
Nein, ich will an die einsen und nullen einer Datei kommen und diese möglichst in einem String oder so haben.
Also wie schon gesagt, das Laden sollte in ein String klappen. Hier ein Beispiel (wenn es ein String sein soll):

Delphi-Quellcode:
function LoadStringFromFile(AFilePath: String; var AFileString: AnsiString): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  if not FileExists(AFilePath) then Exit;
  FileStream := TFileStream.Create(AFilePath, fmOpenRead);
  try
    if FileStream.Size <> 0 then
    begin
      SetLength(AFileString, FileStream.Size);
      FileStream.Read(AFileString[1], FileStream.Size);
      Result := True;
    end;
  finally FileStream.Free end;
end;

function SaveStringToFile(AFilePath: String; AFileString: AnsiString): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  FileStream := TFileStream.Create(AFilePath, fmCreate);
  try
    if Length(AFileString) <> 0 then
    begin
      FileStream.Write(AFileString[1], Length(AFileString));
      Result := True;
    end;
  finally FileStream.Free end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Path: String;
  TestString: AnsiString;
begin
  Path := ExtractFilePath(ParamStr(0));
  LoadStringFromFile(Path + 'Datei-A.exe', TestString);
  SaveStringToFile(Path + 'Datei-B.exe', TestString);
end;
Das mit den Nullen und Einsen ist ein anderer Part. Da kannst du je nachdem die Bits eines Bytes auslesen, z. B. mit AND.
  Mit Zitat antworten Zitat
Fehlersucher

Registriert seit: 10. Nov 2012
32 Beiträge
 
#6

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 30. Jan 2013, 16:56
Wie sollte man denn bei einem Komprimierungsalgorithmus vorgehen:
In welcher Form sollte man eine Datei eingelsesen um später möglichst effektiv zu komprimieren?
Hexadezimal, binär o.ä.?

Gruß
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#7

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 30. Jan 2013, 17:12
In welcher Form sollte man eine Datei eingelsesen um später möglichst effektiv zu komprimieren?
Hexadezimal, binär o.ä.?
Gegenfrage: Willst Du es nicht begreifen?
Man kann NICHTS Hexadezimal oder Oktal oder .. einlesen, NUR binär, weil ALLES in der EDV binär IST.

Ein Byte ist ein Byte ist ein Byte,
ein Bit ist ein Bit ist ein Bit!

Nochmal: Es gibt weder Nullen und Einsen noch Hexadezimal noch Oktal ... in Dateien und im RAM - NUR Bits und Bytes! Bits zu Bytes gruppiert, Bytes nach Bittiefe des OS zu Bytegruppen gruppiert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 30. Jan 2013, 17:16
Wie sollte man denn bei einem Komprimierungsalgorithmus vorgehen:
In welcher Form sollte man eine Datei eingelsesen um später möglichst effektiv zu komprimieren?
Hexadezimal, binär o.ä.?

Gruß
Nochmal zum mitschreiben:

Eine (jede) Datei besteht aus einer Ansammlung von Bytes.
Jedes Byte kann 256 Zustände haben.
Diese Zustände kann man dezimal mit 0..255 darstellen
oder hexadezimal 00..FF
oder binär 00000000..11111111

Der Inhalt ändert sich nicht durch die Darstellung. Diese Darstellung ist nur für unseren analogen Aufnahmemodus gedacht (Augen) und damit wir die Theorie dahinter verstehen.

Wenn du an Komprimierung denkst, dann hat das nichts, aber auch gar nichts mit dezimal, hexadezimal oder binär zu schaffen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 30. Jan 2013, 17:28
Vielleicht noch mein Senf dazu. Das Beispiel weiter vorne wo eine beliebige Datei in einen AnsiString geladen wird, kann man sich letztendlich sparen, bzw. den Teil mit dem String. Einfach mit TFileStream eine Datei öffnen und schon hat man die Datei im Stream. Sie besteht auf Bytes (also Werten zwischen 0 und 256) und hat die Länge der Datei. Ein Byte hat also immer maximal den Wert von 255. Man kann ihn Dezimal schreiben als 255 oder hexadezimal als $FF oder Binär als 11111111. Letztendlich stehen alle für den gleichen Wert, wobei es Delphi Schnuppe ist ob du die Zahl 255 als 255 schreibst oder als $FF. Delphi kommt mit beiden Schreibweisen gleich klar. Komplizierter wird es mit der Binärdarstellung.

Also, du kannst eine Datei in einen AnsiString laden, da er zufällig auch eine Zeichenmenge in sich aufnehmen kann und jedes Zeichen eines von 256 Werten darstellen kann. Musst du aber nicht.
  Mit Zitat antworten Zitat
Fehlersucher

Registriert seit: 10. Nov 2012
32 Beiträge
 
#10

AW: Tutorial Arbeiten mit Dateien auf binärer Ebene

  Alt 30. Jan 2013, 17:46
In welcher Form sollte man eine Datei eingelsesen um später möglichst effektiv zu komprimieren?
Hexadezimal, binär o.ä.?
Gegenfrage: Willst Du es nicht begreifen?
Man kann NICHTS Hexadezimal oder Oktal oder .. einlesen, NUR binär, weil ALLES in der EDV binär IST.

Ein Byte ist ein Byte ist ein Byte,
ein Bit ist ein Bit ist ein Bit!

Nochmal: Es gibt weder Nullen und Einsen noch Hexadezimal noch Oktal ... in Dateien und im RAM - NUR Bits und Bytes! Bits zu Bytes gruppiert, Bytes nach Bittiefe des OS zu Bytegruppen gruppiert.
Ja aber was habe ich dann?
Beim Einlesen von den Bytes habe ich doch die 8 Bits und die sind ja nichts anderes als 1 und 0.
Habe ich demnach nicht nach dem Einlesen eine Reihe aus einsen und nullen?
Wie sollten die Bytes sonst anders dargestellt werden?
  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 08:43 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