Perl中的位操作

时间:2011-01-11 20:22:11

标签: perl

我是perl的新手,我需要一些关于perl中位操作的帮助。这就是我想要做的。我有一个字符串$ str =“453D”,它需要被屏蔽,以便只设置低8位。然后对于3D我需要找到所有位设置。所以

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

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

}

我像C程序一样编写了这个程序。有人可以纠正语法和逻辑错误。

2 个答案:

答案 0 :(得分: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 :(得分:1)

您的字符串看起来像是16位整数的十六进制字符串表示形式。 Perl可以自动强制执行十进制字符串表示,但需要指导十六进制。

使用以下其中一项:

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

至于逻辑错误,看起来你甚至在读它之前就把它移出了一点点。您可能想要交换这两个操作。