JavaScript 从两个长数字构造 UUID

JavaScript constructing UUID from two long numbers

我有两个长数字,我使用 BigInt 表示 JavaScript 中的那些(因为 JavaScipt 中的 53 位整数长度而不是 64 位)。我发现自己需要在 JavaScript.

中用这两个长数字创建一个 UUID / GUID

在 SO 中,我能够多次找到相同的问题,但总是针对不同的编程语言,但不是针对 JavaScript,示例 here:

基本上我正在寻找类似 Java 中的东西,即这里的示例:

public UUID(long mostSigBits, long leastSigBits) {
    this.mostSigBits = mostSigBits;
    this.leastSigBits = leastSigBits;
}

我们可以像这样使用它:

UUID  tempUUID1 = new UUID(55, 100);

结果:

00000000-0000-0037-0000-000000000064

到目前为止我想采用的方法是像那样将十进制转换为十六进制

 BigInt("55").toString('16')     // results to 37
 BigInt("100").toString('16')    // results to 64

然后填充缺失的零。这个功能是怎么实现的,求例子

最好使用 WebCryptoAPI(不幸的是 node.js 不是我在这里寻找的),它可以创建和 read/split 这样的 UUID / GUID 到 2 个单独的 BigInt,即“ mostSigBits”和“leastSigBits”值。

如果有人提供此类功能/方法的示例,我将不胜感激。先谢谢你了。

不需要库,格式化这些数字非常简单 substring'ing:

function formatAsUUID(mostSigBits, leastSigBits) {
    let most = mostSigBits.toString("16").padStart(16, "0");
    let least = leastSigBits.toString("16").padStart(16, "0");
    return `${most.substring(0, 8)}-${most.substring(8, 12)}-${most.substring(12)}-${least.substring(0, 4)}-${least.substring(4)}`;
}

function formatAsUUID(mostSigBits, leastSigBits) {
    let most = mostSigBits.toString("16").padStart(16, "0");
    let least = leastSigBits.toString("16").padStart(16, "0");
    return `${most.substring(0, 8)}-${most.substring(8, 12)}-${most.substring(12)}-${least.substring(0, 4)}-${least.substring(4)}`;
}


const expect = "00000000-0000-0037-0000-000000000064";
const result = formatAsUUID(BigInt("55"), BigInt("100"));
console.log(result, expect === result ? "OK" : "<== Error");