Thread 0x und Bitshift ohne eval? (3 answers)
Opened by thecoder2012 at 2013-06-27 08:46

topeg
 2013-06-30 11:42
#168677 #168677
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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";

View full thread 0x und Bitshift ohne eval?