AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Binärdatei schreiben und lesen?
Thema durchsuchen
Ansicht
Themen-Optionen

Binärdatei schreiben und lesen?

Ein Thema von milos · begonnen am 15. Jan 2014 · letzter Beitrag vom 16. Jan 2014
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Binärdatei schreiben und lesen?

  Alt 15. Jan 2014, 22:04
Aphton du verwirrst ihn doch nur -.-

Ich denke er will einfach nur per TFilestream o.ä. Daten binär (statt in Textform) speichern.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 00:46
Ich glaube TFilestream ist das richtige, jedoch finde ich nirgends einen Weg wie ich es so lösen kann wie ich es brauche :/

Wie kann ich nun wirklich nur Byts reinschreiben? Sry wenn ich was übersehe aber finde es wirklich nirgends o_O

MfG
Milos
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 01:09
Vielleicht solltest du genauer schreiben was du willst, denn "ich will Bytes schreiben" ist etwas zu allgemein, denn selbst wenn du den Text "Hallo Welt!" in ein TMemo schreibst und es abspeicherst, schreibst du Bytes. Bytes schreiben ist also nichts ungewöhnliches.

Vielleicht suchst du aber auch nur das:

Delphi-Quellcode:
// Läd eine Datei und übergibt ihn als String
// sInFile = Name der Datei die geladen werden soll
// sFileString = VAR String - Datei als 8Bit String

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

// Speichert den 8 Bit String als Datei
// sOutFile = Name der Datei unter dem gespeichert werden soll
// sFileString = 8 Bit String

function SaveStringToFile(sOutFile: String; sFileString: AnsiString): Boolean;
var
  FileStream: TFileStream;
begin
  Result := False;
  FileStream := TFileStream.Create(sOutFile, fmCreate);
  try
    if Length(sFileString) <> 0 then begin
      FileStream.Write(sFileString[1], Length(sFileString));
      Result := True;
    end;
  finally FileStream.Free end;
end;
Das ist ein Code aus einem Programm von 2002, ich weiß also nicht ob es heute noch funktioniert.

Wie speicherst du dein Byte? Ganz einfach - erstelle ein AnsiString (AnsiStrings = 8 Bit; String = je nach dem). Das ist dann eine Kette von 8 Bit Bytes, auch wenn es sich String nennt.

Delphi-Quellcode:
var
  s: AnsiString;
begin
  s := s + #32 + #127 + #255;
  //oder
  s := s + Chr(32) + Chr(127) + Chr(255);
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 01:39
Das erinnert mich ein wenig daran und daran
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
510 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 03:13
Ist mir irgendwie zu kompliziert xD Ich glaube ich benutze vorerst Textbasierte Dateien und probiere es später in Bytes zu lösen xD

MfG
Milos
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 04:06
Jetzt erzähle mir bitte was der Unterschied zwischen einer Textdatei und einer Binärdatei ist? Eigentlich keine. Theoretisch nutzt eine Textdatei nur die ersten sieben Bits eines Bytes. Das achte Bit wäre somit immer 0, weil ungenutzt. Theoretisch, oder nur früher, oder nur in USA. In Ländern wie Deutschland kommen zum Alphabet aber noch paar andere Zeichen dazu, die mit den ersten sieben Bits nicht abgedeckt sind, z. B. die Umlaute (siehe Ascii-Zeichensatz). Womit alle 8 Bit benutzt werden. Was ist also der Unterschied zwischen einer Textdatei und einer Binärdatei, wie z. B. einer Exe-Datei? Zuerst mal keiner (lassen wir mal den Uni-Code usw. zuerst außen vorweg), bis auf, dass wenn man eine Textdatei in einem Texteditor öffnet, dass Programm die Bytes in Ascii Zeichen darstellt. Auf der anderen Seite, öffnet man eine Exe Datei mit einem Texteditor, sieht man auch Ascii Zeichen.

Also, und ich hoffe hier kommt jetzt keiner mit einem UnicodeString an, besteht der normale String, soweit es ein AnsiString ist, von einer Aneinanderreihung von Bytes. Ein AnsiString ist eine Byte-Kette. Was das Byte zu bedeuten hat, ob es ein Befehl eines Programms oder eine Buchstabe ist, das hängt von der Deutung ab. Das ist wie mit einem VW-Transporter. Von außen gleich. Sind da acht Sitze drin, ist es ein Personen-Kleinbus, nimmt man die Sitze reaus, ist es ein Möbeltransporter. Das gleiche ist ein AnsiString. Eigentlich für Texte gedacht, man kann damit aber auch Binärdateien laden, z. B. Bilder.

Also, entweder du denkst zu kompliziert oder du kannst nicht erklären was du machen willst. Kleiner Tipp, guck dir an was eine Ascii Tabelle ist. Das ist eine Liste mit Werten zwischen 0 und 255, wobei jede zahl für etwas steht, meistens einen Buchstaben. Das ist aber nur eine Übersetzungstabelle, denn Werte zwischen 0 und 255 stehen für einen Byte. Womit es Binär wird.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Binärdatei schreiben und lesen?

  Alt 16. Jan 2014, 07:01
Also in meinen Dateien sind nur Daten. Keine Bytes, keine Zeichen, sondern Daten. Und noch genauer genommen bestehen sie (zumindest auf meiner Festpladde) aus winzigen Bereichen, die irgendwie magnetisiert sind, mir auch schnurz.

Daten also. Was das für Daten sind? Das kann man so und so sehen. Diese Daten müssen nämlich interpretiert werden. Die meisten machen das, indem Sie die Daten als Zahlen interpretieren und sich jeden einzelne Zahl vornehmen. Genausogut könnte man auch 16 Farben nehmen oder 3 Brotkrümel, oder die D-Tonleiter vollkommen egal. Es kommt auf die Interpretation an.

Nun sind Computer ziemlich Zahlenaffin, d.h. mit Farben, Musikalität und Optik haben sie es nicht so, aber im Zahlenschubsen sind sie ganz groß. Also verwenden wir den Zahlenraum 0..255 als Basisinterpretation der Daten. 0.255 deshalb, weil die Compis intern eigentlich nur Bitschubser sind und irgendwer sich mal gedacht hat, das das Gruppieren zu 8 Bits praktisch sein könnte. Es hätten auch 7 oder 9 sein können (Es waren sogar früher nur 7 und IBM hatte sogar mal 36 Bits in einem Computer, warum, wissen die wohl auch nicht mehr).
Gut gut. 8 Bits sind dann eine Zahl, ein Block. Oder ein Byte.
Auf jeden Fall sollten wir diese Bytes interpretieren, das ist vielleicht einfacher als die Magnetisierung auf der Pladde zu interpretieren. Ohne Interpretation hätten wir nur eine Suppe mit Zahlen, was ziemlich öde ist.

Also z.B. als Text, indem wir jeder Zahl einen Buchstaben zuordnen. Wir Europäer/Wessis sind da ziemlich ignorant und nehmen unsere Buchstaben, davon haben wir ja nicht zu viele. Dann noch Ziffern, ein Paar Sonderzeichen, Zeilentrenner, ein paar Spezialzeichen, die man nicht sieht, aber mit denen man etwas ausdrücken kann und -bupps- haben wir Texte. Als Interpretation.

Oder als Farbe. Dann hätten wir pro Byte eines von 256 Farben. Hmm. Bisserl wenig, aber reicht für's Erste. Meine Frau würde sich natürlich mal wieder aufregen, wie unrein ihre Haut ist, also... was machen wir? Wir mischen. Wir sagen: Das erste Byte ist der Rotanteil, der zweite der Gelb und der dritte der Blauanteil (oder in einer anderen Reihenfolge): Drei Bytes definieren also eine von -schießmichtot- Farben (256*256*256=16777216 um genau zu sein). Oder wir mischen mit anderen Farben (Lila, Hellblau, Gelb und Schwarz. Geht auch, gibt noch mehr Farben:4294967296).

Aber -hey- wie ist das mit Bildern? Bilder können gerastert werden, d.h. man legt ein Gitter drauf und definiert für jedes Karo eine Farbe. Damit man nicht zu viele Farben bekommt, nehmen wir entweder 256, 65536, 16777216 oder 4294967296. Danach 'entmischen' wir jede Farbe und erhalten so den Einzelanteil jeder Farbe, und das ist dann wieder ein jeweils Byte.

Ziemlich kompliziert, eigentlich. Jo, und deshalb macht das alles der Computer für uns. Wir sagen dem einfach: "Nimm dieses Bild, wandle die Farben als Rot/Gelb/Blau oder Cyan/Magenta/Yellow/Black um und speichere dann diesen Bytestrom ab.

Beim Einlesen lesen wir diese komischen Daten und sagen dem Computer: Das hier soll ein Bild sein, und zwar als RGB oder CMYK. Wupps, haben wir unser Bild. Wir könnten die Daten auch als Text interpretieren, aber das wäre dann ziemlicher Blödsinn (vermutlich).

Fazit: Daten sind nichts. Interpretation ist alles.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:40 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