将长数字转换为 base 256 数字系统

Convert long numbers to base 256 number system

我需要将表示为字符串的非常大长度(可能大于 Number.MAX_SAFE_INTEGER)的数字转换为基于 256 的数字系统。
像这样:

console.log(convert_to_base_256("10")); //-> [10]
console.log(convert_to_base_256("1024"); //-> [4, 0]
console.log(convert_to_base_256("123456")); //-> [1, 226, 64]

我知道我可以使用大整数库,但它们中的大多数不支持 base 62 以外的基本转换。

这样做的最佳算法是什么?

你很幸运。主流浏览器*现在原生支持BigInt,所以你可以用一些简单的算法来做你需要的。

let bigString = "123456";
    let bigOne = BigInt(bigString);

    let base256 = [];
    do {
        base256.unshift(Number(bigOne%256n));   // Use Number constructor to cast result
        bigOne = bigOne/256n;
    } while (bigOne)

    console.log(base256);   // [ 1, 226, 64 ]

* 我 运行 在 Firefox 89、Chrome 90 和 Edge 90 中使用它。我无法将它作为 SO 片段或在 JSFiddle 中使用。

注意:这个问题最初没有用 标记,所以我没有考虑到这一点。由于 OP 提出了这个问题,BigInt 支持被添加到 NodeJS 10.4,所以这段代码应该 运行 与那个版本和所有后续版本。