JavaScriptでascii85encoderを作っているのですが、encode後の値がすこし違うものになってしまいます。
なぜなのでしょうか?

例えば、ascii85 Python encoder(base64.a85encode)に"Hello"のバイト列を渡すと87cURDZとなりますが、この関数(ascii85encode)では87cURDZBb;となってしまいます。

function ascii85encode(arr) {
    let str = "";
    let a = [];
    for (let i = 0; i < arr.length; i++) {
        a.push(arr[i]);
        if (a.length === 4) {
            let res = ascii85_str(a);
            str += res;
            a = [];
        }
    }
    if (a.length > 0) {
        for (let t = 0; t < 4 - a.length; t++) {
            //足りないところを0で埋める。
            a.push(0);
        }
        str += ascii85_str(a, true);
    }
    return str
};

function ascii85_str(nums, last=false) {
    const uint32 = createUInt32(nums);
    const str = base85_num(uint32, last);
    if (str === "!!!!!") {
        str = "z";
    }
    return str;
};

function createUInt32(a) {
    if (a.length > 4) {
        throw new Error("createUInt32 argument must be a four elements list of UInt8");
    }
    return (a[0] << 24 | a[1] << 16 | a[2] << 8 | a[3]);
};

function base85_num(n, l = false) {
    //引数としてわたってきたブロックの値(32bit値)を85進数の値(0~84)に変換
    n = Math.abs(n);
    let res = [];
    for (let p = 0; p < 5; p++) {
        let s = String.fromCodePoint((n%85) + 33)
        res.unshift(s);
        n = parseInt(n / 85);
        if (l && n === 0) { //与えられた値が最後のブロックでかつ、nがゼロ(これ以上余りが出ない)ならそこで終了
            break;
        }
    }
    return res.join("");
};


export { ascii85encode };