2011-01-11 72 views
0

我是perl的新手,我需要一些幫助來處理perl中的位操作。這是我想要做的。我有一個字符串$ str =「453D」,它需要被屏蔽,以便只設置低8位。那麼對於3D,我需要找到所有設置的位。所以Perl中的位處理

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

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

} 

我寫這個程序就像一個C程序。有人可以糾正語法和邏輯錯誤。

+1

您可以發佈完整的程序和預期的輸出嗎?我有一種感覺,你打算使用整數而不是字符串。 – 2011-01-11 20:29:59

回答

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位整數的十六進制字符串表示形式。 Perl可以自動強制十進制字符串表示,但需要十六進制指導。

使用下列之一:

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

至於邏輯錯誤,好像你正在移出點點出來之前,你甚至閱讀。您可能想要交換兩個操作。