[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