битовая манипуляция в Perl - PullRequest
0 голосов
/ 11 января 2011

Я новичок в 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);
  }

}

Я написал эту программу как программу на Си. Кто-нибудь может исправить синтаксис и логические ошибки, пожалуйста.

Ответы [ 2 ]

3 голосов
/ 11 января 2011
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 голос
/ 11 января 2011

Ваша строка выглядит как шестнадцатеричное представление 16-битного целого числа. Perl может автоматически приводить десятичные строковые представления, но для шестнадцатеричного кода требуется руководство.

Используйте одно из следующего:

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

Что касается логических ошибок, кажется, что вы немного сдвинетесь с места, прежде чем даже прочитаете его. Возможно, вы захотите поменять обе операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...