[Vienna-pm] Gibt es eigentlich ..

Wolfgang Laun Wolfgang.Laun at thalesgroup.com
Fri Apr 27 03:18:35 PDT 2007


gooly at gmx.at wrote:

>Hmm,
>mein Fehler, ich war nicht genau genug.
>
Und jetzt wohl auch noch nicht...

>
>Jedes Zeichen wird ja normalerweise mit 8 oder 16 bit 'ver-coded', 10 
>Zahlen wäre so 80 oder 160 bit - richtig?
>Wenn ich aber _nur_ 16 Zeichen habe, bräuchte ich eigentlich nur 3 bit 
>
000, 001,...111 sind wie viele Zeichen?

Ist das Alphabet der 16 Zeichen für alle Strings das selbe?

Warum kann der Datenstrom nicht insgesamt gezippt werden?

>um alles zu codieren, ergo nur 30 bits ergo 38% bzw 12,5%. Eventuell 
>noch eine kleine weitere Verbesserung, wenn man das häufigste Zeichen 
>zB den Delimiter ';' mit zwei statt drei bits 'ver-coded' und eventuell 
>noch mehr, wenn man nicht alle 16 braucht.
>
>So müsste dann den resultierende String bitweise zusammenbaut werden.
>
>Insofern wäre halt nicht der String als Ganzes sondern es muss jedes 
>einzelne Zeichen bearbeitet werden. Ich dachte an eine Funktion, der 
>man den Zeichensatz und den String übergibt und der den komprimierten 
>String zurückgibt:
>Ich stellte mir daher so etwas vor:
>  foreach my $s ((split //, $orgStr)) {
>     setNext3Bits( $s );
>  }
>Ich bräuchte dann auch eine 3Bit-Kombination als Zeilenende oder 
>Recordende.
>Zum (De-) Kompriemieren brauch daher nur an beiden 'Enden' den hash bzw 
>die Zuordnung:
>   Zeichen => 3BitCode,
>...
>  3BitCode => Zeichen
>
>
>Am Freitag, 27. April 2007 schrieb Wolfgang Laun:
>  
>
>>Die gewünschten Zeichen (max. 16) können mit tr/// auf [0-9a-f]
>>abgebildet werden. Diese können mit pack auf die halbe Länge gepackt
>>werden. Die Umkehrung ist trivial. Vermutlich ist es notwendig, die
>>ursprünglichen Länge mitzupacken, da mit 'H*' immer eine gerade
>>Anzahl von Zeichen entpackt wird (vgl. 2. Test).
>>
>>my $s = "abcdefghijklmnop";
>>print "s=$s\n";
>>$s =~ tr/abcdefghijklmnop/0123456789abcdef/;
>>my $p = pack( 'H*', $s );
>>print "length p = " . length( $p ) . "\n";
>>my $u = unpack( 'H*', $p );
>>$u =~ tr/0123456789abcdef/abcdefghijklmnop/;
>>print "u=$u\n";
>>    
>>
>
>hmm, brauch ich da nicht zum dekomprimieren den Orginalcode anyway?
>
Was für einen Originalcode? Die Abbildung von 16 Zeichen auf [0-9a-f] wird
im 2. tr/// umgedreht. Annahme ist (s.o.), dass alle Strings dasselbe 
Alphabet
verwenden.
-WL

>Calli
>_______________________________________________
>Vienna-pm mailing list
>Vienna-pm at pm.org
>http://mail.pm.org/mailman/listinfo/vienna-pm
>  
>



More information about the Vienna-pm mailing list