mousey
mousey

Reputation: 11901

bit manupulation in Perl

I am new to perl and I need some help with the bit manipulation in perl. This is what I want to do. I have a string $str = "453D" and It needs to be masked so that only lower 8 bits are set. Then for 3D I need to find all bits set. so

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

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

}

I wrote this program like a C program. Can some one correct the syntax and logical errors please.

Upvotes: 0

Views: 308

Answers (2)

JB.
JB.

Reputation: 42094

Your string looks like a hexadecimal string representation of a 16-bit integer. Perl can coerce decimal string representations automatically, but needs guidance for hex.

Use one of the following:

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

As for logic errors, it seems like you're shifting out the little bit out before you even read it. You might want to swap both operations.

Upvotes: 1

Roland Illig
Roland Illig

Reputation: 41617

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";

Upvotes: 3

Related Questions