我在javascript中有一个十六进制数。为了便于显示,我想将字符串格式化为:
ffffffff-ffff-ffff
00000000-0000-01ff
前面填充了零的(8 digits)-(4 digits)-(4 digits)
我一直在尝试编写自己的循环,将任意十六进制数格式化为这种格式,但这似乎已经在JavaScript中可用了。
在JavaScript中有没有内置的格式化十六进制数的方法?
发布于 2012-03-28 22:03:41
我会做一个两步的过程:
1)将数字转换为带有前导零的16位十六进制:
var i = 12345; // your number
var h = ("000000000000000" + i.toString(16)).substr(-16);
2)添加破折号
var result = h.substr(0, 8)+'-'+h.substr(8,4)+'-'+h.substr(12,4);
发布于 2013-05-13 00:16:16
继续knabar的回答:
如果你的数字真的是一个完整的64位长度,你应该知道javascript只有两倍的精度,最高的精度大约是53位。例如。
var i = 0x89abcdef01234567; // a 64-bit constant
var h = ("000000000000000" + i.toString(16)).substr(-16); // "89abcdef01234800"
因此,您可能希望将其拆分为两个32位数字,并一次格式化它们的8位数字。然后是第二个警告: javascript对有符号的32位整数执行逐位操作,并且这种格式化代码不能处理负数。
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + i.toString(16)).substr(-8); // "0-2e0000"
由于您希望将数字格式化为十六进制的数字很可能是逐位操作的结果,因此可以调整代码以打印二进制的补码:
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffd20000"
这将产生任意正数和负数的整数部分的低32位的十六进制表示。这可能就是您想要的(大约是printf("%08x")
)。更多的转角案例:
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"
发布于 2017-02-13 19:40:44
ES6版本
function toPaddedHexString(num, len) {
str = num.toString(16);
return "0".repeat(len - str.length) + str;
}
var hexStr = toPaddedHexString(12345, 16);
https://stackoverflow.com/questions/9909038
复制相似问题