![]() |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Edit: Blödsinn
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Na, nee, eigentlich ist deine Begründung 'falsch', weil sie nur zwei Beispiele nennt.
Und auch noch davon ausgeht, das die 'binäre Darstellung' als 8-bit ASCII erfolgt. Under Delphi > 2007 wären das ja eh 2-Byte pro Char :stupid: Die Frage ist, wie man komprimiert? Indem man die Bytes verdichtet oder die Bits. Aber ist egal und Thema für einen anderen Thread. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Edit: @Furchtbichler.. du könntest recht haben :stupid:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Nehmen wir man du hast einen 0815 Standard 7-Bit Ascii Text. Somit ist das 8 Bit immer 0, also kann man es löschen und schon spart man pro Byte 12,5%. Nehmen wir man du hast einen 0815 Standard 8-Bit Ascii Text. Man könnte eine Wörterliste erstellen und dann die Wörter im Text durch Adressen auf die Wörter ersetzen. Im ersten Moment erhöht sich die Dateigröße, da man jetzt die Wörterliste plus Adressenliste hat, aber falls sich Wörter wiederholen, landen sie nur ein mal in der Wörterliste. Zum Schluß spart man Platz. Bei einer Bitmap würde ich, wie du so schön sagst, lieber mit 1 und 0 arbeiten, denn eine Bitmap hat große sich wiederholende gleiche Flächen. Da kommen schon paar hundert Nullen am Stück. Aber wenn das alles so einfach wäre, würde es jeder machen. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Was beim Standardverfahren, dem TIF-Encoding, wie es viele Druckertreiber zum encoden und Drucker zum decoden verwenden, dazu führt, daß die encodeten Daten wesentlich größer als das Original werden. Und das ganze auch nur bei einer Farbtiefe von 2 Bit. Bei größeren Farbtiefen können kaum Folgen von „0en” oder „1en” entstehen. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Bei Flächen meinte ich optisch gesehen, z. B. weiße Flächen auf einem Bild, was aber natürlich Zeilen sind. Und die werden oft mit Nullen aufgefüllt. Bitmap hat also viele sich wiederholen Längen.
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Dann sähe die Welt aber zeimlich trostlos aus. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Du gibst doch zu, dass man Bitmaps in der Regel gut komprimieren kann, oder? Natürlich kann eine Bitmap alles enthalten, von einer bunten Herbstlandschaft, über grüne Idylle und Gesichter, oder jede Menge weitere Natur Motive. Ok, diese Bilder haben wenige gleichfarbige Flächen, somit wären sie nicht so gut nach dem Konzept zu komprimieren. Allerdings, wer speichert schon eine bunte Herbstlandschaft als Bitmap? Kaum einer, dafür gibt es z. B. Jpeg.
Im Grunde für alles zu verwenden, sind Bitmaps inzwischen eher Buttons, Screenshots oder sonstige technische Bilder. Und die haben doch viele gleichfarbige Bereiche. Und solltest du mir nicht glauben, spare dir vorerst die Antwort, nimm einen Hexeditor und öffne paar typische Bitmaps auf deinem Rechner und sag mir was du siehst. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Meine Anmerkungen bezogen sich auf Deine Erklärung zur Kompression von BitMaps per 1en und 0en. Und das führt eben nur bei Sonderfällen zur Verkleinerung, nicht im Allgemeinfall. Und der Allgemeinfall (die Regel) ist nunmal alles Mögliche, bloß keine Simpel-Grafik. Zitat:
Zitat:
Daß man allgemeine Bilder nicht als BitMap speichert, sondern als JPG oder GIF oder .. stimmt nun evtl. nur für Leute, denen es egal ist, ob das Original erhalten bleibt. Deshalb speichern Leute, denen das NICHT egal ist, eben weiter als BitMap oder als TIFF (weil TIF-Encoding eben keine Veränderung bedeutet, sondern eine Archivierung mit exakter Reproduktions-Möglichkeit des Originals). |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Nun, die Erklärungen und Beispiele zu Kompression sind in diesem Stadium eher als Grundkonzepte zu betrachten und sind noch sehr weit von irgendwelchen Anleitungen. Ich hab Bitmap als Beispiel gewählt, da ich Bitmap Grafiken im allgemeinen als großflächig gleichfarbig kenne, was nicht bedeutet, dass sie nicht alles darstellen können. Es ist eben meine Beobachtung, dass meine Bitmaps oft 60 bis 90% aus einer Farbe bestehen.
Trotzdem, der TE hat sich viel vorgenommen und im allgemeinen kann man Delphi gut lernen wenn man gleich ein Großprojekt anfängt, aber einen Komprimieralgorithmus schreiben wollen und parallel fragen wie man an die einzelnen Bits eines Bytes kommt, also da bestehen noch paar Lücken. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
@MeierZwoo & @Popov
irgendwie habt ihr beide Recht. Ein Kompressionsprogramm sollte nicht nur eine Methode zum komprimieren kennen, sondern die Daten vorher analysieren und dann die geeignete Variante wählen. Manchmal wird die Datei auch einfach nur so gespeichert, weil keine sinnvolle Kompression möglich ist ;) |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Auch wenn es interessant ist Euch "zuzulesen" wie wär's sich zum Titelthema zu kommen?
Gruß K-H |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Aber damit es weiter geht, hier ein Konverter Text zu BitString:
Delphi-Quellcode:
Ergebnis:
function TextToBitStr(Str: string): string;
function ByteToBits(B: Byte): string; var i: Integer; begin Result := ''; for i := 0 to 7 do Result := IntToStr(((B shr i) and 1)) + Result; end; var i: Integer; begin Result := ''; for i := 1 to Length(Str) do Result := Result + ByteToBits(Ord(Str[i])); end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(TextToBitStr('Hallo Welt!')); end;
Code:
0100100001100001011011000110110001101111001000000101011101100101011011000111010000100001
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
So, ich hab zum Spaß einen kleinen Algorithmus für Textkomprimierung geschrieben. Der Algorithmus funktioniert so, dass sich wiederholende Wörter durch Adressen auf das erste Wort ersetzte werden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: string; i: Integer; sl: TStringList; begin s := 'AUCH EIN KLEINER BEITRAG IST EIN BEITRAG'; //Text der komprimiert wird. Er ist 40 Zeichen lang ShowMessage(Format('Text lautet "%s" und ist unkomprimiert %d Bytes lang.', [s, Length(s)])); sl := TStringList.Create; try sl.Delimiter := ' '; //-------------------------------------------------------------------------- ShowMessage('Der Text wird jetzt komprimiert.'); sl.DelimitedText := s; for i := sl.Count - 1 downto 0 do if (sl.IndexOf(sl[i]) <> i) and (sl.IndexOf(sl[i]) > -1) then sl[i] := '~' + IntToStr(sl.IndexOf(sl[i])); s := sl.DelimitedText; ShowMessage(Format('Text lautet "%s" und ist komprimiert %d Bytes lang.', [s, Length(s)])); //-------------------------------------------------------------------------- ShowMessage('Der Text wird jetzt wieder dekomprimiert.'); sl.DelimitedText := s; for i := 0 to sl.Count - 1 do if (Length(sl[i]) > 1) and (sl[i][1] = '~') then sl[i] := sl[StrToInt(Copy(sl[i], 2, MaxInt))]; s := sl.DelimitedText; ShowMessage(Format('Text lautet "%s" und ist unkomprimiert %d Bytes lang.', [s, Length(s)])); finally sl.Free; end; end; |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Delphi-Quellcode:
Ich bin nicht sicher, ob es auch Codierungen mit mehr als 4 Byte je Zeichen gibt. Falls ja, müsste man AsNumber halt als int64 deklarieren und entsprechend casten.
function CharToBits(c: Char): string;
const BITS_PER_BYTE = 8; BITVALUES: array[Boolean] of char = ('0', '1'); var i, BitWidth: integer; AsNumber: Cardinal; begin BitWidth := BITS_PER_BYTE * SizeOf(c); SetLength(Result, BitWidth); AsNumber := Cardinal(c); for i := BitWidth downto 1 do begin Result[i] := BITVALUES[(AsNumber and 1) = 1]; AsNumber := AsNumber shr 1; end; end; function StrToBits(const s: string): string; var i: integer; begin Result := ''; for i := 1 to Length(s) do Result := Result + CharToBits(s[i]); end; |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Du hast Recht, ich musste mir auch mal sagen, dass die Annahme, dass ein Byte aus 8 Bits besteht, eher eine Legende ist. Andere Systeme, andere Bytes.
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Ab Delphi 2009 sind das 2 Bytes, da String dort UTF-16 kodiert ist. Wer dann nicht bedacht hat, bei solchen Operationen mit SizeOf(Char) zu multiplizieren, hatte die Kappe auf. Die Foren waren seinerzeit voll mit solchen Beiträgen ;)
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Nein, ich meine hier weniger die genutzten Bytes beim String, sondern aus wie viel Bits besteht ein Byte. Beim PC eben aus 8, aber bei anderen Systemen aus 4 oder 7 usw. Somit ist Byte kein eindeutige Größe.
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Sagt mal, sollen wirklich Zeichen zu Bits oder nicht eher Bytes zu Bits konvertiert werden. Und wieso überhaupt konvertieren? Verstehe ich nicht (mehr).
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Chars können verschieden lang (durch unterschiedlich viele Bytes definiert) sein, aber nicht Byte. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
@Furtbichler
Der TE hat gefragt, der TE hat Möglichkeiten erhalten. Was er damit macht, ist sein Sache. Vielleicht führt das nirgendwo, vielleicht entwickelt er daraus den genialen Komprimieralgorithmus. Aber vielleicht macht er daraus nur Musik ;)
Delphi-Quellcode:
@MeierZwoo
procedure MachMusikAusDemString(s: string);
var i: Byte; begin for i := 0 to Length(s) do if s[i] = '1' then Windows.Beep(300 * Random(7), 100) else Sleep(100); end; procedure TForm1.Button1Click(Sender: TObject); var s: string; begin s := '0100100001100001011011000110110001101111001000000101011101100101011011000111010000100001'; MachMusikAusDemString(s); end; Jajn: ![]() |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
okey
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Ob Du nun -aus welch mittelalterlich haltlosem Aberglauben auch immer- Wikipediaablehner bist oder nicht. ![]() Allerdings ist das auch ein wenig Wortklauberei, denn mittlerweile verwendet kaum noch jemand die Bezeichnung 'Byte' für etwas anderes als 8-Bit. Es sind aber nun mal nicht *immer* 8 Bit. Das wäre ein Oktett. Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Ein Beispiel hätte ich, wo ich mal vor Jahren versucht haben Kilobyte und Kibibyte richtig zu stellen, bzw. nebeneinander zustellen. Es gab ein kurzes Editwar, dann habe ich es sein lassen, da es mir zu blöd wurde. Ein Kilobyte sind 1024 Byte und basta. Ich soll mich mit meinen Kibibyte bitte hier nicht einmischen. Inzwischen ist das aber in etwa so wie den Artikel mal abgeändert habe. Letztendlich setzt sich das Richtige auf Dauer durch.
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Ich habe an keiner Stelle gesagt, daß ich nicht in Wikipedia lese.
Aber erstens finde ich es ausgesprochen unhöflich, wenn nicht eine Zumutung, dem gegenüber einen Link als Antwort zu präsentieren, ohne auf die Stelle hinzuweisen, WAS man denn in dem (evtl. seitenlangen) Artikel meint. Das bedeutet nicht nur einen erheblichen Aufwand für das Lesen, sondern produziert nur neue Mißverständnisse, weil der, der den Link gesetzt hat, evtl. eine ganz andere Stelle meint, als der Lesende dann liest. Ein Link kann als Quellenangabe zu einem Zitat akzeptiert werden, aber eben nicht ohne dieses Zitat. Was daran mittelalterlich sein soll, sich auf andere Quellen als Wikipedia zu stützen, geht mir nicht in den Kopf. Denn alle Artikel auf Wikipedia stützen sich ja nun auch auf diese mittelalterlichen anderen UrQuellen - es sei denn, sie wären reine Fantasie. Aber man kann es auch wie mein Nachbar machen, sich einen riesen RAM ins Handy einbauen, dann Wikipedia permanent aufs Handy laden und am Stammtisch mit einem riesen Wissen glänzen - obwohl sonst ohne das Handy das Wissen gegen Null tendiert. Aber das ist wenigstens nicht mittelalterlich! |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Extremer ist das imho mit word, also einem Maschinenwort: In allen mir bekannten Programmiersprachen hat es 16 bit, aber nach Wortsinn hat ein word Registerbreite. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Popov, das wäre zB einer der Artikel, auf den ich hingewiesen hätte. Wo nach dem zitieren der anerkannten Regeln der Technik und teils gesetzlich verankerten Einheiten übergangslos zum Wunschdenken (KiB) übergegangen wurde - OHNE Hinweis!
Aber es gibt unzählige Stellen - davon lebt Wikipedia ja auch, daß eben korrigiert werden kann bzw. Korrekturvorschläge eingebracht werden können und über Korrekturen diskutiert werden kann. Ich habe auch schon an mehreren Stellen Unsauberkeiten per Korrekturvorschlag beseitigt. An einigen Stellen wäre es aber zu mühsam, dies erst zu versuchen. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
![]() |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Was ist an dem Link denn jetzt besser als an dem auf Wikipedia? Aus erster Hand komme ich da auch nicht an die Infos.
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Allerdings fehlt mir immer noch eine Quelle, in der nachweislich ein Byte anders als mit 8 Bit definiert ist. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Dein Link = Keine Info. Mein Link = Wer lesen kann ist klar im Vorteil. Zitat:
Zitat:
Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
@MeierZwoo
Nun, mögen die Publikationen vom Beuth Verlag eine Art Gesetzesstatus haben und somit tatsächlich das Maß der Dinge in Deutschland, eine Behauptung aufstellen und auf die Seite vom Beuth Verlag verlinkten ist allerdings nicht das gleiche wie eine Behauptung aufstellen und auf Wikipedia zu verlinkten. Denn die Seite Beuth Verlag leifert keine Informationen. Dort findet man keine DINs online. Somit kann man dort nichts nachprüfen. |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Zitat:
Zitat:
|
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Ach Meyer, hör doch auf. Wehr dich nicht gegen das Offensichtliche.
Byte = Informationseinheit, Zeichen=Informationseinheit 1. Semester Informatik (oder Schule?) Die englische Seite hat noch mehr Info (bitte selbst klicken und lesen oder muss ich wieder vorkauen?) ![]() |
AW: Tutorial Arbeiten mit Dateien auf binärer Ebene
Ich kann kein englisch :( Und ja, ich höre nun auf.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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