![]() |
Dateien binär beschreiben?
Hi,
Ich stehe vor folgendem Problem: Ich möchte meinen "eigenen" Datenkompressionsalgorithmus nach der Idee von Huffman schreiben und muss dafür allerdings auch Dateien binär(oder auch hexadezimal... oder wie auch immer) bearbeiten können. Das auslesen ist weniger das Problem, da kann man ja per TFileStream ein Byte auslesen und in ein beliebiges Zahlensystem umwandeln... Das Problem ist mehr das schreiben: Wie kann man das tun? Also dass nach dem Schreiben in der Datei nicht Chars, sondern die Bits/Bytes gesetzt werden? Wenn ich mir hier allerdings zu viele Sorgen machen sollte, also es unproblematisch sein sollte, jede beliebige Datei, sei es Bild, EXE oder TXT, textbasiert zu bearbeiten, bitte schreibt es hier. Ich sag' schonmal im Voraus DANKE und hoffe demnach auf eine Antwort. Superwinger |
Re: Dateien binär beschreiben?
Du willst die einzelnen Bytes in Zeichenketten umwandeln und dann erst komprimieren?
Warum :gruebel: Das Umwandel bläst du Datei doch nur unnötig auf. Das Resultat der Huffman-Komprimierung ist schon binär. MfG, Bug PS: Wenn du Anregung brauchst: ![]() |
Re: Dateien binär beschreiben?
Schön, dass es da etwas vorgefertigtes gibt :D
Aber ich wollte meinen Huffman KOMPLETT selbst schreiben, das ist mein Anliegen ;) |
Re: Dateien binär beschreiben?
Hallo,
dem FileStream ist deine Interpretation des IO-Buffers egal, für ihn sind es eine Folge von Bytes, nie Chars oder Integers. Die statistische Kodierung nach Huffman geht zwar auf die Bit-Ebene herunter, aber schreiben und lesen wirst du Bytes. Grüße vom marabu |
Re: Dateien binär beschreiben?
Im Prinzip kannst du auch einen Record also Datenstrukturen, Arrays oder ähnliches mit einem TFileStream lesen und schreiben.
Delphi-Quellcode:
Type
TMyData = packed record Int: integer; B: Byte; end; procedure TForm1.Button1Click(Sender: TObject); var FileStream: TFileStream; //MyData: Byte; //MyData: array[0..20] of byte; MyData: TMyData; Pfad: AnsiString; begin Pfad := 'D:\...'; ZeroMemory(@MyData, SizeOf(MyData)); if FileExists(Pfad) then begin FileStream := TFileStream.Create(Pfad, fmOpenReadWrite); try FileStream.Read(MyData, SizeOf(MyData));//Daten lesen MyData.Int := ...;//Daten ändern MyData.B := ...; FileStream.Position := 0; if FileStream.Write(MyData, SizeOf(MyData)) = SizeOf(MyData) then //Daten schreiben Showmessage('fertig'); finally FileStream.Free; end; end; end; |
Re: Dateien binär beschreiben?
Bin ziemlich sicher, einen Weg gefunden zu haben :)
Danke :) Gruß JMM |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 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