1

それで、0から15までの数値があるので、それらを16進コード(0からf)で保存しました。これで、ニブルの 16 進コード値を含むデータの文字列ができました。

データは次のようになります。

a0fc3d78270db962e4ba525cf3acd

2つのニブルでバイナリxorを実行する正確/エレガント/高速な方法と、ニブルではなくバイナリを実行する最速の方法は何ですか?

私が今考えていることは、最初にニブルを完全なバイトに変換することです:

$nibble = "c";
$numeric = ord($nibble);
$byte = ($numeric<58)?chr($numeric-48):chr($numeric-55);

次に、これらのバイトに対して必要な操作 (xor または not) を実行し、結果の値を再びニブルに再変換します。

$byte1 = chr(7); $byte2=chr(12);
$xor_val = $byte1 ^ $byte2;
$numeric = ord($xor_val);
$nibble = ($numeric<58)?chr($numeric+48):chr($numeric+55);

このアプローチの問題は、バイトに not (~) 操作を適用すると、最初の 4 ビットも逆になり (したがって、ニブルの左側に 1111 が追加されます)、さらに複雑になる必要があることです。上記のコードで結果をニブルに再変換する前に、結果の ord() 値から 240 を減算します。これにより、将来のコードのアップグレードが煩雑になるだけでなく、将来のコードの機能の解釈が難しくなります。

ニブルではなくビット単位の xor を実行し、結果の値を 16 進コード (文字列) として取得するための最良/正確な方法は何ですか?

例:

'3' xnor 'a' = '6'  
'c' xnor '5' = '6'  
'b' xnor '8' = 'c'
4

1 に答える 1