Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Binär oder Hex Datei erstellen (https://www.delphipraxis.net/7015-binaer-oder-hex-datei-erstellen.html)

Trucki 30. Jul 2003 10:06


Binär oder Hex Datei erstellen
 
Hi,
kleines Problem:
möchte eine Datei erstellen, in der ich ca. 1Million Werte im Bereich von 0-255 speichern und wieder auslesen kann.
Die Datei soll später auf einem Mikrocontroler verwendet werden, deshalb sollten die Werte nicht im ASCII Format gespeichert werden, sondern gleich im Hex oder Bin format.

Ich habe auch eine Lösung dafür gehabt, indem ich einfach meinen Wert mit CHR(X) in ein Zeichen Wandel, dieses in einer TXT Datei speicher und beim auslesen das Zeichen wieder mit ord(Z) in eine Zahl wandel.
Nur bekomme ich große Probleme, wenn jetzt mein Wert zufällig 13 ist, da CHR(13) die Entertaste ist und so die ganze Struktur meine Textdatei nicht mehr stimmt und nur noch Müll ausgelesen wird. Auch mit Trennzeichen komme ich nicht weiter, weil ein CR (CHR(13)) wieder alles über den Haufen wirft.

Wie kann ich also gleich Binär, oder auch Hex in eine Datei schreiben, ohgne das Rad neu zu erfinden?

Danke

Cu Trucki

Chewie 30. Jul 2003 11:05

Re: Binär oder Hex Datei erstellen
 
Da du binäre Daten speicherst, sind Textfiles nicht sehr geeignet.
Nimm lieber einen Filestream. Deine Daten kannst du in einem Array of Byte verwalten, dieses Array kannst du dann dirrekt in den Filestream speichern. Dabei ist es völlig egal, ob du das Zeichen 0, 13 oder was auch immer hast.

BTW: Daten werden immer binär gespeichert. Ob du sie als ASCII-Text darstellst oder als Hexadezimalcode, der Inhalt ist immer das selbe.

Sharky 30. Jul 2003 12:57

Re: Binär oder Hex Datei erstellen
 
Hai Trucki,

ich habe das ganze mal mit einem MemoryStream gemacht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 my_MStream : TMemoryStream;
 ndx,
 li_groesse : Integer;
 lb_wert   : Byte;

begin
  li_groesse := 1024 * 1024;
  my_MStream := TMemoryStream.Create;
 try
  my_MStream.SetSize (li_groesse);
  for ndx := 0 to li_groesse-1 do
   begin
    lb_wert := Random (256);
    my_MStream.Position := ndx;
    my_MStream.Write (lb_wert,1);
   end;
   my_MStream.SaveToFile ('c:\test.dat');
 finally
   my_MStream.Free;
 end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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 by Thomas Breitkreuz