komprimierung mittels Huffman-Algorithmus, bit-shifting.

  • Themenstarter Themenstarter YoYo
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
Y

YoYo

Gast
Hallo!
Ich muss für die Uni ein Kompriemierungsprogramm mittels Huffman Algorithmus schreiben. Bin auch schon relativ weit. Jetzt bin ich allerdings an einer Stelle wo ich nicht mehr weiss wie ich das umsetzen soll: (ich versuche mal das Problem zu beschreiben ohne den ganzen Huffman Code zu erklären)

Ich habe ine Liste: in dieser stehen jeweils Objekte die einmal den numerischen Byte wert speicher sowie die länge der dafür benötigten bits.

Beispielobjekt 1:
private int wert = 10; // der numerische wert
private int BitLaenge = 4; //weil ja 10 binär dargestellt 1010 ist

Beispielobjekt2:
private int wert = 23; // der numerische wert
private int BitLaenge = 5; //weil ja 23 binär dargestellt 10111 ist


Eigentlich werden die int-werte aber ja mit 32 bit dargestellt das heisst der Wert 10 aus Beispielobjekt1
wäre 00000000000000000000000000001010.
Jetzt will ich mir aber einen Bytestream oder OutputStream mit den Bits füllen ohne die führenden nullen. Also wenn später Objekt 1 und Objekt2 gespeichert werden wird nur 101010111 gespeichert(jeweils die Binärwerte aber ohne die nullen.)
Habe mit dem shiftoperator schon die 1010 bei Objekt 1 ganz an den anfang geschrieben --> 1010000000....
aber jetzt muss ich den nächsten wert ja dann an die 4te stelle schreiben.
Bin ratlos wie man das machen soll?
Hoffe jemand konnte mir folgen?!?!

Danke schon mal!!
 
glaub das du das willst..? du musst dir die verschiebeposition halt mitspeicher, wenn das ding jetzt in der summe länger als 32 bit wird hast du wieder ein problem... naja, vllt. gibt es da ja eine class schon für sowas..
Code:
		 int wert1 = 10;
		 int BitLaenge1 = 4;
		 int wert2 = 23;
		 int BitLaenge2 = 5;
		 int res= 0 | wert1 << (32-BitLaenge1);
		 // res= 10100000000000000000000000000000
		 // =-2^31+2^29=-1610612736		 	
		 System.out.println(res);
		 res= res | wert2 << (32-BitLaenge1-BitLaenge2);
		 // res= 10101011100000000000000000000000
		 // =-2^31+2^29+2^27+2^25+2^24+2^23=-1417674752
		 System.out.println(res);
 
Danke für die schnelle Hilfe!
Das mit der Oder-Verknüfung war genau was noch fehlte. Das Problem, dass nach 32 Bit Ende ist haben wir jetzt auch gelöst. Man muss das ganze Bitweise machen also immer nur 1 weiter nach links shiften und mitzählen bis 32 dann bis dahin in den Stream schreiben und mit einem neuen int weitermachen.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben