私はここ数日間、Perl でこの問題を抱えていました。数え切れないほどの man ページ、perldocs、およびあまりにも多くの検索用語をグーグル検索した後、ここの誰かが私を助けてくれることを願っています.
Perl の 16 進数 0xFFFF ではなく、16 進数の値、つまり「FFFF」を表す 2 つの文字列が与えられます。これらの文字列のうち 2 つが与えられた場合、それらをバイナリ形式に変換し、2 つのビットごとの AND を実行してから、この出力を取得し、LSB から MSB までの各ビットを調べます。
現在、2 つの問題があります。16 進文字列を 16 進数に変換し、ビットごとの AND の結果をシフトします。
16 進文字列を 16 進数に変換するために、次のアプローチを試しましたが、それらを印刷して調べたときに機能しないようです。
$a = unpack("H*", pack("N*", $a));
$a = sprintf("%H", $a);
「print」を使用してこれらのそれぞれを調べても、正しい値が表示されず、「sprintf」を使用しても表示されません...
2 番目の問題は、ビットごとの AND を実行した後に発生し、右に 1 シフトして各ビットを調べたいと考えています。前の問題を回避するために、16 進文字列の代わりに実際の Perl 16 進数を使用しました ("ffff" ではなく 0xffff)。 . 次のように右シフトを実行しようとすると:
#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);
得られた結果の値はバイナリ形式ですが、正しくありません。
この種の操作を実行する正しい方法は何ですか?