2011-01-11 44 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 

至于逻辑错误,好像你正在移出点点出来之前,你甚至阅读。您可能想要交换两个操作。