Frage

Ich habe eine Hybridkompressionstechnik, die ich implementieren möchte, meine Implementierung ist (bisher): Ich kann eine Zeichenfolge in eine codierte komprimierte Zeichenfolge codieren.Dies sind Binärzeichenfolgen.Zum Beispiel

Ich lese Texte aus einer Textdatei ->

Konvertieren Sie es dann in eine binäre Zeichenfolge ->

konvertieren Sie es dann in eine codierte binäre Zeichenfolge.

An diesem Punkt kann ich die codierte binäre Zeichenfolge in einer Textdatei speichern, aber ich möchte wissen, was im Allgemeinen durchgeführt wird.

Beispielsweise, wenn wir winrar software verwenden, it -

    .
  1. liest nicht, wie ich oben gesagt habe, er komprimiert jede Datei
  2. macht .RAR-Datei als Ausgabe
  3. so, wie ein Kompressor "eine beliebige Datei als reine Binärform lesen und wie die Ausgabedatei herstellt?

    auf andere Weise, was ich möchte, ist zu wissen, wie Sie eine Datei als reine Binärform lesen und eine Ausgabedatei erstellen, da ich ein Codierungs- und Decodierschema habe. Bitte kommentieren Sie etwas mit Frage, ich bin neu zum Thema.

War es hilfreich?

Lösung

Eine Datei ist ein Byte-Strom

Obwohl OSES einige Glocken und Pfeifen (z. B. Metadaten oder Gabeln ), die meisten definieren eine Datei als Sequenz von 0 oder mehr bytes .

Jedes Byte in der Datei ist ein numerischer Wert von 0 bis 255 (inklusive). Es gibt nichts mehr.

Ein Dateiformat ist eine Möglichkeit, den Bytes in einer Datei

einen Sinn anzugeben

Für ein einfaches Beispiel könnten Sie eine Datei haben, die ein schwarz-weißes Bild darstellt, in dem jedes Byte entweder 0 (schwarzem Pixel) oder 1 (weißem Pixel) ist, eine Zeile nach dem anderen. Vielleicht kodieren die ersten beiden Bytes die Bildbreite als 16-Bit-Zahl, und die zweiten beiden Bytes kodieren die Höhe als 16-Bit-Zahl.

Dieses Beispiel ist sehr ineffizient, da jedes Pixelbyte niemals die möglichen Werte 2-255 verwenden kann. Möglicherweise möchten Sie über Informationstheorie lesen.

"Textdatei" ist ein Dateiformat

In einer Textdatei wird jeder mögliche Wert 0-255 eine bestimmte Buchstabe, ein bestimmter Buchstabe, ein Symbol oder ein "SPECIAL EFFECT" -Zeich-Zeichen wie NewLine angegeben. Art von. Streng genommen in der ascii codiert, nur Werte 0-127 haben eine Bedeutung. .

Es gibt viele verschiedene Textzeichen, obwohl nur wenige gewöhnliche. In unicode , Zeichen sind nicht immer 1 Byte in der Länge.

aber lass uns bei ASCII bleiben. Wenn Sie "51A3" als Text speichern, gehen die Byte-Werte 53, 49, 97, 51 in die Datei, da sie dem "5", "1" usw. entsprechen.

Wenn Sie den hexadezimalen Wert 0x51 und 0xA3 als bytes speichern, gibt es einfach diese beiden Bytes (81, 163 in der Dezimalzahl.) Dies ist also die Hälfte der Anzahl von Bytes. Die Datei ist jedoch keine Textdatei mehr, da 163 nicht in ASCII definiert ist.

Andere Dateiformate erfordern eine spezialisierte Software

Textdateien sind beliebt, da Sie sie in jedem Editor öffnen können (Notepad, Nano). Wie Sie verstehen, sind sie nicht sehr raumeffizient.

Es ist jedoch nicht schwer, Ihre eigene Software zu schreiben. Hier ist ein Beispiel.

generasacodicetagpre.

Nach dem Ausführen dieser Überprüfung ist die Länge der Datei halb der Länge der Hex-Zeichenfolge. Lernen Sie auch, ein HexDump-Tool zu verwenden, um den Inhalt der Datei zu inspizieren.

Python's Bytes Objekte haben viele Funktionen, aber wenn Sie die Grundidee verwenden oben (Liste der Ints in Range 0-255 -> Bytes-Objekt) und (über Bytes-Objekt) und einen Int-Int-in-Reichweite 0-255 erhalten), müssen Sie nicht zu tief in die Details kommen.

Allzweck-Komprimierungssoftware versteht normalerweise nicht die Dateien, die sie komprimiert

Wenn Sie eine MP3-Datei in einen Reißverschluss oder RAR legen, behandelt die Komprimierungssoftware es als eine Reihenfolge von Bytes, auf dieselbe Weise, wie sie eine JPEG- oder EXE- oder HTML-Datei behandelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top