首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在JavaScript中将十六进制数字格式化为短UUID

在JavaScript中将十六进制数字格式化为短UUID
EN

Stack Overflow用户
提问于 2012-03-28 21:57:29
回答 7查看 41.8K关注 0票数 27

我在javascript中有一个十六进制数。为了便于显示,我想将字符串格式化为:

代码语言:javascript
运行
复制
ffffffff-ffff-ffff
00000000-0000-01ff

前面填充了零的(8 digits)-(4 digits)-(4 digits)

我一直在尝试编写自己的循环,将任意十六进制数格式化为这种格式,但这似乎已经在JavaScript中可用了。

在JavaScript中有没有内置的格式化十六进制数的方法?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-03-28 22:03:41

我会做一个两步的过程:

1)将数字转换为带有前导零的16位十六进制:

代码语言:javascript
运行
复制
var i = 12345; // your number
var h = ("000000000000000" + i.toString(16)).substr(-16);

2)添加破折号

代码语言:javascript
运行
复制
var result = h.substr(0, 8)+'-'+h.substr(8,4)+'-'+h.substr(12,4);
票数 58
EN

Stack Overflow用户

发布于 2013-05-13 00:16:16

继续knabar的回答:

如果你的数字真的是一个完整的64位长度,你应该知道javascript只有两倍的精度,最高的精度大约是53位。例如。

代码语言:javascript
运行
复制
var i = 0x89abcdef01234567; // a 64-bit constant
var h = ("000000000000000" + i.toString(16)).substr(-16); // "89abcdef01234800"

因此,您可能希望将其拆分为两个32位数字,并一次格式化它们的8位数字。然后是第二个警告: javascript对有符号的32位整数执行逐位操作,并且这种格式化代码不能处理负数。

代码语言:javascript
运行
复制
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + i.toString(16)).substr(-8); // "0-2e0000"

由于您希望将数字格式化为十六进制的数字很可能是逐位操作的结果,因此可以调整代码以打印二进制的补码:

代码语言:javascript
运行
复制
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffd20000"

这将产生任意正数和负数的整数部分的低32位的十六进制表示。这可能就是您想要的(大约是printf("%08x"))。更多的转角案例:

代码语言:javascript
运行
复制
var i = 1.5; // non-integers are rounded
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "00000001"

var i = -1.5; // rounding is towards zero
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffffffff"

var i = NaN; // not actually a number
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "00000000"
票数 15
EN

Stack Overflow用户

发布于 2017-02-13 19:40:44

ES6版本

代码语言:javascript
运行
复制
function toPaddedHexString(num, len) {
    str = num.toString(16);
    return "0".repeat(len - str.length) + str;
}

var hexStr = toPaddedHexString(12345, 16);
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9909038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档