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");
我有两个长数字,我使用 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");