我是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程序一样编写了这个程序。有人可以纠正语法和逻辑错误。
答案 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
至于逻辑错误,看起来你甚至在读它之前就把它移出了一点点。您可能想要交换这两个操作。