我正试图从头开始编写Adler-32哈希函数,只是为了好玩,我已经完成了它,只是每次哈希字符串时,总是在前面缺少零。我已经看了几十次这个公式和Adler-32的描述,我不明白为什么我的代码会产生它。
function toAdler32(str) {
if (typeof str != "string") throw new Error('HashUtil: Data passed to Hash function was not of type String.');
let A16 = 1;
let B16 = 0;
for (let i = 0; i < str.length; i++) {
A16 += (str.charCodeAt(i)) % 65521;
B16 += A16 % 65521;
}
return ((B16 << 16) | A16).toString(16);
}
console.log(toAdler32('test'));
// Returns `45d01c1` when it should return `045d01c1`.
你需要用0来填充它-它去掉了前导0,因为前导0在数字中没有意义,无论基数是10还是16…
如果你有100张牌,你不会说你有0100张牌,因为你不需要领先的0。
如果你想让字符串有一定的长度,请用零填充:
如何用前导零填充值?