AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Bytes zu einem komprimieren

Ein Thema von schwa226 · begonnen am 14. Apr 2011 · letzter Beitrag vom 15. Apr 2011
Antwort Antwort
Seite 1 von 2  1 2      
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 07:11
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!
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 07:18
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#3

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 07:21
50% Kompression in 100% aller Zustände? Unmöglich.
Das wäre ja als wenn man versucht 2 Bit in eins zu quetschen.
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#4

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 07:26
Ok, Danke!

Ich habe nähmlich nur eine begrenzte Anzahl an Bytes die ich übergebe und ich wollte sie besser Ausnützen. Schade...
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 08:07
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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 08:15
gibt es einen eingeschränkten Wertebereich für Deine Bytes?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#7

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 08:37
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.
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#8

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 10:26
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#9

AW: 2 Bytes zu einem komprimieren

  Alt 14. Apr 2011, 15:01
Klingt insgesammt irgendwie nach Seriennummer entwerfen oder so was in der Art.
Hab ich's getroffen?
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#10

AW: 2 Bytes zu einem komprimieren

  Alt 15. Apr 2011, 09:57
So ähnlich.
Das Byte Array representiert eine Unique ID des Systems. Z.B per MAC oder Festplattenseriennummer.

Die Länge kann nicht geändert werden. Es müssen 8 Bytes bleiben damit man mit älteren Version kompatibel bleibt.

Ürsprünglich war gar keine Checksum oder Infos in den 8 Bytes.
Dann ist einmal eine 2 Byte Checksum dazu gekommen. (Dadurch ist die mindest App-Version feststellbar)

Nun möchte ich die Infos noch erweitern. Z.B. um eine Author ID.

Author ID ich selbst: $11
Author ID irgend ein anderer: $12
...
..
.

Will man die Erkennung nun hinzufügen ist ja eine zusätzliche Checksum erforderlich. Ansonsten kann es Zufall sein, dass genau in Byte[4] ein $11 steht und fälschlicherweise eine Author ID angenommen wird. Also eine z.B. XOR Checksum der Bytes[0..4] in Byte[5] speichern. Stimmt diese kann man sagen das Byte[4] eine Author ID ist.

Ich habe zuerst auch überlegt ob man mit 8 Bit auskommt.
Das würde aber nur z.B. 2^4 IDs und für die Checksum 2^4 Bits zulassen.
16 IDs sind mir zuwenig. 128 IDs sollten es schon sein. Dann bleibt aber nur mehr 1 Bit für die Checksum -> nicht sicher genug.

Somit werden 2 Bytes benötigt.

Man könnte aber auch 7 Bits ID und 5 Bits Checksum = 12Bits (1 1/2 Bytes) verwenden.
Liese sich das dann in 8 Bit komprimieren?
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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