Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   2 Bytes zu einem komprimieren (https://www.delphipraxis.net/159818-2-bytes-zu-einem-komprimieren.html)

schwa226 14. Apr 2011 07:11

2 Bytes zu einem komprimieren
 
Hi,

ich möchte gerne 2 Bytes in 1 Byte komprimieren.
Geht das? Oder besser gefragt, geht das einfach?

Ohne das man ZLib verwenden muss. Also einfach ein kleiner Algo?

Danke!

Sir Rufo 14. Apr 2011 07:18

AW: 2 Bytes zu einem komprimieren
 
Zitat:

Zitat von schwa226 (Beitrag 1094995)
Hi,

ich möchte gerne 2 Bytes in 1 Byte komprimieren.
Geht das? Oder besser gefragt, geht das einfach?

Ohne das man ZLib verwenden muss. Also einfach ein kleiner Algo?

Danke!

Nein :)

Um es mal sehr vereinfacht darzustellen, wie das mit dem Komprimieren funktioniert:

Code:
aa aa aa aa aa aa aa aa aa ff ff ff ff ff cc cc cc cc cc
Komprimiert
Code:
09 aa 05 ff 05 cc

mleyen 14. Apr 2011 07:21

AW: 2 Bytes zu einem komprimieren
 
50% Kompression in 100% aller Zustände? Unmöglich.
Das wäre ja als wenn man versucht 2 Bit in eins zu quetschen.:lol:

schwa226 14. Apr 2011 07:26

AW: 2 Bytes zu einem komprimieren
 
Ok, Danke!

Ich habe nähmlich nur eine begrenzte Anzahl an Bytes die ich übergebe und ich wollte sie besser Ausnützen. Schade...

Satty67 14. Apr 2011 08:07

AW: 2 Bytes zu einem komprimieren
 
Der RunLength Algorithmus wie ihn SirRufio gezeigt hat, ist wohl der einfachste verfügbare, der aber bei kleinen gemischen Daten eher mehr Output erzeugt.

Falls der Inhalt der Daten bekannt und veränderbar ist, wäre eine Möglichkeit Boolsche Bytes in Bits zu fassen und je nach Range Hi/Lo Nibble zu nutzen. Auch bei reinen reine ASCII-Texten lässt sich 30% sparen

Bummi 14. Apr 2011 08:15

AW: 2 Bytes zu einem komprimieren
 
gibt es einen eingeschränkten Wertebereich für Deine Bytes?

schwa226 14. Apr 2011 08:37

AW: 2 Bytes zu einem komprimieren
 
Es ist ein Array[0..7] of Byte.

Byte[6] und Byte[7] fallen schon einmal weg da dort eine Checksumme der ersten 6 Bytes drinnen ist.
Die 6 Bytes werden benutzt um die (unique) ID festzustellen.

Nun möchte ich die Informationen noch erweitern.
Also Byte[5] für andere Informationen nutzen.
Somit verkürzt sich die ID schon um 1 Byte.

Wenn ich es nicht komprimieren kann verkürzt sich die ID um 2 Bytes und es bleiben "nur noch" 4 Bytes übrig. (1 Byte Infos, 1 Byte Checksum)

Also von 2^48 verkürzt auf 2^32.

Ist noch nicht so dragisch, aber wenn ich noch mehr Informationen reinpacken will bleiben noch weniger Bytes für die ID.

Der Bereich der Bytes wird voll genützt, $00-$FF.

Klaus01 14. Apr 2011 08:49

AW: 2 Bytes zu einem komprimieren
 
Guten Morgen,

wenn Du den Inhalt des Array beliebig bestimmen kannst, so scheint es wenigstens,
warum kannst Du dann nicht über die Größe des Arrays bestimmen
und das Array entsprechend erweitern um diese Zusatzinfos unterzubringen.

.. und die Checksumme weglassen - ist nicht die feine Art

Grüße
Klaus

Uwe Raabe 14. Apr 2011 08:58

AW: 2 Bytes zu einem komprimieren
 
Wo kommt die Unique-ID denn her und wieviele verschiedene IDs sind denn so zu erwarten? Immerhin kann man mit vier Byte schon ca. zwei Milliarden IDs codieren.

himitsu 14. Apr 2011 10:26

AW: 2 Bytes zu einem komprimieren
 
Zitat:

Zitat von schwa226 (Beitrag 1094995)
ich möchte gerne 2 Bytes in 1 Byte komprimieren.
Geht das?

ja eventuell

Also wenn die Bytes nicht vollständig ausgenutzt werden, dann ja.

Werden z.B. in jedem Byte nur Werte von 0 bis 15 gespeichert, dann kann man alle Zustände beider bytes in einem Byte abbilden.
Und das ist es, was komprimierungen versuchen ... sie suchen Gemeinsamkeiten/Abhängigkeiten von Bytes und brauchen so nicht alle Werte speichern, sondern nur die kleineren Informationen der Abhängigkeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz