私はこのコードを持っています。このコードが実際に何を意味するのかを理解してください
for(var i = 0; i < input.length; i++)
{
x = input.charCodeAt(i);
output += hex_tab.charAt((x >>> 4) & 0x0F)
+ hex_tab.charAt( x & 0x0F);
}
0x0Fとは?で、 >>> ってこと?
私はこのコードを持っています。このコードが実際に何を意味するのかを理解してください
for(var i = 0; i < input.length; i++)
{
x = input.charCodeAt(i);
output += hex_tab.charAt((x >>> 4) & 0x0F)
+ hex_tab.charAt( x & 0x0F);
}
0x0Fとは?で、 >>> ってこと?
>>>
符号なしのビットごとの右シフト演算子です。0x0F
は 10 進数で 15 に等しい 16 進数です。これは下位 4 ビットを表し、ビットパターンを変換します0000 1111
。&
はビットAND
演算です。
(x >>> 4) & 0x0F
バイトの上位ニブルを提供します。したがって、 がある場合6A
、基本的には次のようになります06
。
6A = ((0110 1010 >>> 4) & 0x0F) = (0000 0110 & 0x0F) = (0000 0110 & 0000 1111) = 0000 0110 = 06
x & 0x0F
バイトの下位ニブルを提供します。したがって、 がある場合は6A
、 になります0A
。
6A = (0110 1010 & 0x0F) = (0110 1010 & 0000 1111) = 0000 1010 = 0A
私が知る限り、おそらく何らかのチェックサムを作成するために、文字列内のすべての文字の個々のニブルの値を合計しているようです。
0x0f
バイトの 16 進表現です。具体的には、ビットパターン00001111
文字の値を取得し、右に 4 桁シフトし ( >>> 4
、符号なしシフトです)、上記のパターンでビット単位AND
で実行します。たとえば、左端の 4 ビットを無視すると、0 ~ 15 の数値が得られます。
次に、その数値を元の文字の右端の 4 ビット (& 0x0F
シフトなしの 2 番目)、別の 0 ~ 15 の数値に追加します。
0x0F
16 進数の数値です。And>>>
はビットごとの右シフト演算子です。