2011-01-11 4 views
0

Ich bin neu in Perl und brauche etwas Hilfe bei der Bitmanipulation in Perl. Das möchte ich tun. Ich habe eine Zeichenfolge $ str = "453D" und es muss maskiert werden, so dass nur niedrigere 8 Bits gesetzt werden. Dann für 3D muss ich alle gesetzten Bits finden. alsoBitmanipulation in Perl

$i=0; 
@bitsset; 
$str = $str&0xFF; 

for $i(0..7) 
{ 
    $str = ($str>>1); 
    if($str&1) 
    { 
    push(@bitset,$i); 
    } 

} 

Ich schrieb dieses Programm wie ein C-Programm. Kann jemand bitte die Syntax und logische Fehler korrigieren?

+1

Könnten Sie bitte das komplette Programm und die erwartete Ausgabe posten? Ich habe das Gefühl, dass Sie eine Ganzzahl anstelle einer Zeichenkette verwenden möchten. –

Antwort

3
my $str = "453D"; 
$str = hex($str) & 0xFF; 

my @bitsset; 
foreach my $i (0..7) { 
    if ($str & 0x01) { 
    push(@bitset,$i); 
    } 
    $str = $str >> 1; 
} 
print @bitset, "\n"; 
1

Ihre Zeichenfolge sieht wie eine hexadezimale Zeichenfolgendarstellung einer 16-Bit-Ganzzahl aus. Perl kann Dezimalzeichenkettenrepräsentationen automatisch erzwingen, benötigt jedoch eine Anleitung für hex.

Verwenden Sie eine der folgenden Möglichkeiten:

my $str = 0x453D;  # for a constant 
my $str = hex '453D'; # for a variable 

Wie für logische Fehler, scheint es, wie Sie das wenig aus Verschiebung, bevor Sie es sogar lesen. Möglicherweise möchten Sie beide Vorgänge austauschen.