在Javascript中格式化十六进制数

Dav*_*vid 21 javascript formatting hex

我在javascript中有一个十六进制数字.出于显示目的,我想将字符串格式化为:

ffffffff-ffff-ffff
00000000-0000-01ff
Run Code Online (Sandbox Code Playgroud)

(8位数) - (4位数) - (4位数),正面有填充零

我一直在尝试编写自己的循环来将任意十六进制数格式化为这种格式,但这似乎应该在javascript中可用.是否有内置的方法来格式化javascript中的十六进制数字?

谢谢!

kna*_*bar 52

我会做两个步骤:

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

var i = 12345; // your number
var h = ("000000000000000" + i.toString(16)).substr(-16);
Run Code Online (Sandbox Code Playgroud)

2)添加破折号

var result = h.substr(0, 8)+'-'+h.substr(8,4)+'-'+h.substr(12,4);
Run Code Online (Sandbox Code Playgroud)


hex*_*wab 14

进一步对knabar的回答:

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

var i = 0x89abcdef01234567; // a 64-bit constant
var h = ("000000000000000" + i.toString(16)).substr(-16); // "89abcdef01234800"
Run Code Online (Sandbox Code Playgroud)

因此,您可能希望将其拆分为两个32位数字,并将它们一次格式化为8位数.然后第二个警告:javascript对带符号的 32位整数执行按位运算,并且此格式代码无法处理负数.

var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + i.toString(16)).substr(-8); // "0-2e0000"
Run Code Online (Sandbox Code Playgroud)

因为你想要以十六进制格式化的数字很可能是按位操作的结果,所以代码可以调整为以二进制补码打印:

var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffd20000"
Run Code Online (Sandbox Code Playgroud)

这产生任意正数和负数的整数部分的底部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"
Run Code Online (Sandbox Code Playgroud)


Nil*_*esh 10

ES6版本

function toPaddedHexString(num, len) {
    str = num.toString(16);
    return "0".repeat(len - str.length) + str;
}

var hexStr = toPaddedHexString(12345, 16);
Run Code Online (Sandbox Code Playgroud)

  • 这是通过EMCAScript 2017中的padStart进一步简化的。`num.toString(16).padStart(len,“ 0”)` (3认同)

Pro*_*r08 7

String调用padStart和调用有两种方法padEnd

const num = 15;
console.log(num.toString(16).padStart(2, "0")); // "0f"
Run Code Online (Sandbox Code Playgroud)
const num = 15;
console.log(num.toString(16).padEnd(2, "0")); // "f0"
Run Code Online (Sandbox Code Playgroud)

链接上的附加信息: padStartpadEnd