为什么我的 Adler-32 哈希函数每次都漏掉一个零?

Why does my Adler-32 Hash Function miss a zero every time?

我正在尝试从头开始编写 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。

如果您希望字符串具有特定长度,请对其进行零填充:

How can I pad a value with leading zeros?