Thread 0x und Bitshift ohne eval?
(3 answers)
Opened by thecoder2012 at 2013-06-27 08:46
Es gibt mehrere Möglichkeiten das Problem zu lösen. Und gerade das unübersichtliche Bit-Shift ist unter Perl nicht nötig. Es gibt einfachere Möglichkeiten:
Diese erste Variante wandelt den Hex-String in einen Binärstring und entpackt ihn wider als als eine Reihe von 8-Bitigen Werten. Code (perl): (dl
)
1 2 3 my $hex = 'E1B4FF'; my ($x1,$x2,$x3)=unpack('C3', pack( 'H6', $hex ) ); print $x1 . $x2 . $x3 . "\n"; Hier wird unpack benutzt um den String in immer zwei Zeichen zu zu erlegen, die dann mit hex in Werte umgewandelt werden: Code (perl): (dl
)
1 2 3 my $hex = 'E1B4FF'; my ($x1,$x2,$x3)=map{ hex }unpack('(A2)*',$hex ); print $x1 . $x2 . $x3 . "\n"; Das splitten lässt sich auch mit einer Regexp machen. Beachte dabei die Klammer um die Regexp. Das erzwingt einen Listenkontext und die gefundenen Werte werden zurück gegeben anstatt die Anzahl. Code (perl): (dl
)
1 2 3 my $hex = 'E1B4FF'; my ($x1,$x2,$x3)=map{ hex }( $hex=~/(..)/g ); print $x1 . $x2 . $x3 . "\n"; |