这是bytes
来自string
的函数,并抓取每个字母的字符代码以创建bytyes
的数组
function checksum(bytes) {
var a = 0;
var b = 0;
for (var i = 0; i < bytes.length; i++) {
a = (a + bytes[i]) % 0xff;
b = (b + a) % 0xff;
}
return (b << 8) | a;
}
我对% 0xff
和b << 8
的角色感到困惑。有人可以帮我打破这个吗?
答案 0 :(得分:1)
a等于模数为255的所有元素的总和 b等于假定模255的所有值的总和(所以1次是最后一个元素+ 2倍之前的那个......)
最终值为16位数,其中高8位为b,低8位为a。
这实际上是弗莱彻的校验和
答案 1 :(得分:0)
此函数计算a和b,并从中生成校验和。
a 的计算方法如下:
b 计算为模255的累积值
最后,通过连接a到b
生成校验和结果的长度为2个字节(16位),其中第一个字节为b,第二个字节为a。
示例:强>
(c is the current char value)
c | a |b
----------------
8 |8 |8
13 |21 |29
5 |26 |55
0 |26 |81
180 |206 |287
100 |51 |83
cheksum = 51,83 = 0x3353 = 0011 0011 0101 0011