16 進数値 0x78 があるとします。最初の 4 ビット、つまり 3:0 に 1 を追加し、最後の 4 ビットに 2 を追加する必要があります。[7:4]。さらに、0xF に 1 を追加すると、次の値にロールオーバーせず、0xF のままにする必要があります。減算についても同様です。これまでに試したアプローチは次のとおりです。
$byte=0x78;
$byte2 = unpack('b4', $byte);
print "byte2 = $byte2 \n";
--> ここでは出力が 1000 なので、最初の 4 ビットを抽出しようとしました。同様に、右シフトして最後の 4 ビットを抽出し、演算を実行できます。しかし、加算または減算を実行するには、0x8 +/- 1 を実行できるように、1000 を 16 進数形式に変換したいと考えていました。そのために、次のことを試しました。
$hex2 = sprintf('%02x', $byte2);
print "hex2 = $hex2 \n";
--> 出力は 3e8 です。16 進形式で 2 つの値のみを出力することになっているため、8 または 08 ではなく 3e8 を取得する理由がわかりません。
上記のコマンドで手動で $hex2 = sprintf('%02x', 0b1000); と入力すると、正しい結果が得られます。したがって、perl はこれを数値ではなく文字列と見なしています。その文字列を 2 進数に変換する方法はありますか? 他のより簡単な方法またはアプローチが役立ちます。