У меня эта проблема в Perl уже несколько дней, и после того, как я искал бесчисленные справочные страницы, perldocs и набрал слишком много поисковых терминов, надеюсь, кто-то здесь поможет мне.
Мне даны две строки, которые представляют шестнадцатеричные значения, то есть "FFFF", а не шестнадцатеричное число Perl 0xFFFF. Учитывая две из этих строк, я хочу преобразовать их в двоичную форму, выполнить побитовое И из двух, затем взять выходные данные этого и исследовать каждый бит от LSB до MSB.
У меня сейчас две проблемы; преобразование шестнадцатеричной строки в шестнадцатеричное число и сдвиг
результат побитового И. *. 1005 *
Для преобразования шестнадцатеричной строки в шестнадцатеричное число я попробовал следующие подходы, которые, кажется, не работают, когда я распечатываю их для проверки:
$a = unpack("H*", pack("N*", $a));
$a = sprintf("%H", $a);
Использование «print» для проверки каждого из них не показывает правильное значение, равно как и использование «sprintf» ...
Вторая проблема у меня возникает после выполнения побитового И, и я хочу проверить каждый бит, сдвигая вправо на 1. Чтобы избежать предыдущей проблемы, я использовал реальные шестнадцатеричные числа Perl вместо шестнадцатеричных строк (0xffff вместо " FFFF "). Если я попытаюсь выполнить сдвиг вправо следующим образом:
#Convert from hex number to binary number
$a = sprintf("%B", $a);
$b = sprintf("%B", $b);
$temp = pack("B*", $a) & pack("B*", $b);
$output = unpack("B*", $temp);
В этот момент все выглядит хорошо, и, используя «print», я вижу, что значения операции AND выглядят правильно, но когда я пытаюсь смещаться следующим образом:
$output = pack("B*", $output);
$output = $output >> 1;
$output = unpack("B*", $output);
Полученное значение получено в двоичной форме, но не правильно.
Как правильно выполнить эту операцию?