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)
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)
| 归档时间: |
|
| 查看次数: |
34013 次 |
| 最近记录: |