con la respuesta de knabar:
Si su número es realmente un total de 64 bits de longitud que debe tener en cuenta que sólo ha Javascript dobles, que alcanzan un máximo de alrededor de 53 bits de precisión. P.ej.
var i = 0x89abcdef; // a 64-bit constant
var h = ("000000000000000" + i.toString(16)).substr(-16); // "89abcdef"
Así que es probable que desee dividir esto en dos números de 32 bits, y formatearlos de 8 dígitos a la vez. A continuación, aparece la segunda advertencia: javascript realiza operaciones en modo bit en con números enteros de 32 bits, y este código de formato no puede manejar números negativos.
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + i.toString(16)).substr(-8); // "0-2e0000"
Ya que es bastante probable que los números que desea formateado en hexadecimal son el resultado de las manipulaciones a nivel de bits, el código puede ser ajustado para imprimir en complemento a dos en su lugar:
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffd20000"
Esto produce la representación hexadecimal de los 32 bits inferiores de la parte integral de números arbitrarios positivos y negativos. Esto es probablemente lo que quiere (es aproximadamente printf("%08x")
). Algunos casos más esquinas:
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"
Desafortunadamente no hay manera de dar formato a estos números hexadecimales en JavaScript. Pero mira [este enlace] (http://josscrowcroft.github.com/accounting.js/), tal vez sea útil. – Neq