En complément de la réponse de knabar :
Si votre nombre a vraiment une longueur de 64 bits, vous devez savoir que javascript n'a que des doubles, qui ont une précision maximale d'environ 53 bits. Par exemple
var i = 0x89abcdef01234567; // a 64-bit constant
var h = ("000000000000000" + i.toString(16)).substr(-16); // "89abcdef01234800"
Vous voudrez donc probablement le diviser en deux nombres de 32 bits et les formater 8 chiffres à la fois. C'est alors que survient la deuxième mise en garde : javascript effectue des opérations bit à bit sur signé Les nombres entiers de 32 bits, et ce code de formatage ne peut pas gérer les nombres négatifs.
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + i.toString(16)).substr(-8); // "0-2e0000"
Comme il est assez probable que les nombres que vous souhaitez voir formatés en hexadécimal soient le résultat de manipulations bit à bit, le code peut être modifié pour imprimer en complément à deux :
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffd20000"
Cela permet d'obtenir la représentation hexadécimale des 32 bits inférieurs de la partie intégrante des nombres positifs et négatifs arbitraires. C'est probablement ce que vous voulez (c'est approximativement printf("%08x")
). Quelques autres cas de figure :
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"