Hi!
Im Moment knobel ich halt noch an PERL rum.
Hab' meine Testdatei mal mit jeder Menge
$gif .= hex("xyz's"); zusammengebaut und versucht
sie wieder rauszuschreiben.
Ich habe mal folgendes zusammen getippert ... einfach mal ausprbieren ;-)
--------------------------------------------------------------
#!/usr/bin/perl
sub LZW
{
my ($inBits, $inStringBytes) = @_;
my $outBits, $moreBitsCode, %table, $lastCode, $inStringBits, @inChunks, $outStringBits, $buffer;
my $CC = 2 ** $inBits;
my $EOI = $CC + 1;
$inStringBits = join('', map {unpack 'b8', $_} split('',$inStringBytes));
@inChunks = grep {$_} split("(.{0,$inBits})", $inStringBits);
@table{(map {unpack("b$inBits", pack("I", $_))} 0..$CC-1), 'CC', 'EOI'} = map {pack("I", $_)} (0..$EOI);
$outBits = $inBits + 1;
$moreBitsCode = 2 ** $outBits;
$lastCode = $EOI;
$outStringBits = unpack("b$outBits", $table{'CC'});
$buffer = '';
foreach $code (@inChunks)
{
if (exists $table{$buffer . $code})
{
$buffer .= $code;
}
else
{
$outStringBits .= unpack("b$outBits", $table{$buffer});
$table{$buffer . $code} = pack("I", ++$lastCode);
$buffer = $code;
if ($lastCode == $moreBitsCode)
{
++$outBits;
$moreBitsCode *= 2;
}
}
}
if ($buffer)
{
$outStringBits .= unpack("b$outBits", $table{$buffer});
}
$outStringBits .= unpack("b$outBits", $table{'EOI'});
return join('', map {pack('b8', $_)} (grep {$_} split('(.{0,8})', $outStringBits)));
}
my $toCode = pack("h32", "0123456789ABCDEF"x2);
my $coded = &LZW(4, $toCode);
print join(' ', map {unpack 'H2', $_} split('',$coded));
print "\n10 04 31 48 31 07 25 B5 58 73 8F 44 59 98 C6 79 60 04\n";
--------------------------------------------------------------
Jörk