В дополнение к ответу Кнабара:
Если ваше число на самом деле составляет целые 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"