seguito alla risposta del knabar:
Se il numero è davvero un pieno di 64 bit tempo si deve essere consapevoli che Javascript deve solo raddoppia, che uscita superiore a circa 53 bit di precisione. Per esempio.
var i = 0x89abcdef; // a 64-bit constant
var h = ("000000000000000" + i.toString(16)).substr(-16); // "89abcdef"
quindi probabilmente vogliono dividere questo in due numeri a 32 bit, e formattare le 8 cifre alla volta. Quindi la seconda avvertenza avverte: javascript esegue operazioni bit a bit su con numeri interi a 32 bit firmati e questo codice di formattazione non può gestire numeri negativi.
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + i.toString(16)).substr(-8); // "0-2e0000"
Dal momento che è abbastanza probabile che i numeri si desidera formattato in esadecimale sono il risultato di manipolazioni bit per bit, il codice può essere ottimizzato per la stampa in complemento a due, invece:
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffd20000"
questo produce la rappresentazione esadecimale di i 32 bit inferiori della parte integrale di numeri arbitrari positivi e negativi. Questo è probabilmente quello che vuoi (è approssimativamente lo printf("%08x")
). Alcuni altri casi angolo:
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"
Sfortunatamente non c'è modo per formattare tali numeri esadecimali in JavaScript. Ma controlla [questo link] (http://josscrowcroft.github.com/accounting.js/), forse aiuta. – Neq