2011-01-11 10 views
0

私はperlには新しいので、perlでのビット操作に関する助けが必要です。これは私がしたいことです。私は文字列$ str = "453D"を持っているので、下位8ビットだけが設定されるようにマスクする必要があります。 3Dの場合は、すべてのビットを設定する必要があります。 soPerlでのビット操作

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

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

} 

私はこのプログラムをCプログラムのように書いています。ある人が構文と論理エラーを修正してください。

+1

完全なプログラムと期待される出力を投稿できますか?文字列ではなく整数で操作しようとしている気がします。 –

答えて

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

文字列は、16ビット整数の16進文字列表現のように見えます。 Perlは小数点文字列の表現を自動的に強制することができますが、16進数のガイダンスを必要とします。次の

いずれかを使用:あなたもそれを読む前に、あなたが少し出てシフトしているような論理エラーについては

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

、それはそうです。両方の操作を入れ替えることができます。