我有这个代码。请让我明白这段代码的实际含义
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
是一个十六进制数,等于十进制的 15。它代表低四位并转换位模式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
是字节的十六进制表示。具体来说,位模式00001111
它获取字符的值,将其向右移动 4 位(>>> 4
,这是一个无符号移位),然后AND
使用上面的模式按位执行 - 例如,忽略最左边的 4 位导致数字 0-15。
然后它将该数字添加到原始字符最右边的 4 位(第二位& 0x0F
没有移位),另一个 0-15 数字。
0x0F
是一个十六进制数。And>>>
是按位右移运算符。