2013-09-05 26 views
7

Ich muss einen Weg finden, eine große Zahl in eine Hex-Zeichenfolge in Javascript konvertieren. Geradeaus habe ich versucht aber wenn myBigNumber einen sehr großen Wert hat (zB 1298925419114529174706173) dann wird ein fehlerhaftes Ergebnis zurückgeben, das ist einfach genial. Ich habe versucht, durch eigene Funktion zu schreiben, wie folgt:Convert eine große Ganzzahl in eine Hex-Zeichenfolge in Javascript

function (integer) { 
    var result = ''; 

    while (integer) { 
     result = (integer % 16).toString(16) + result; 
     integer = Math.floor(integer/16); 
    } 
} 

jedoch eine große Zahl 16 Modulo alle return 0 (Ich denke, diese grundlegende Frage ist, was das Problem mit toString verursacht habe ich auch versucht (integer % 16) mit (integer - 16 * Math.floor(integer/16)) ersetzt aber das hatte. das gleiche Problem.

ich habe auch in der Big Integer Javascript-Bibliothek gesucht, aber das ist ein großes Plugin für einen hoffentlich relativ einfach Problem.

Alle Gedanken, wie ich ein gültiges Ergebnis zu bekommen? Vielleicht einig Art von Teile und herrsche Ansatz? Ich bin wirklich ziemlich fest hier.

+1

Dies ist ein Problem mit großen Zahlen, die Umwandlung nicht '_String_ 1298925419114529174706173 == = 1298925419114529174706170' –

+0

Ihre Nummer ist weit über die größte Ganzzahl von Javascript, siehe http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number -can-go-t – bfavaretto

+2

Nun, das macht keinen Spaß. Wenn ich eine Basis-10-Darstellung der Zahl als eine Zeichenfolge hätte, gibt es eine direkte Möglichkeit, diese in eine Hex-Zeichenfolge umzuwandeln? –

Antwort

2

Die betreffenden Zahlen sind oberhalb der größten Ganzzahl von Javascript. Sie können jedoch mit solchen großen Zahlen über Strings arbeiten und es gibt einige Plugins, die Ihnen dabei helfen können. Ein Beispiel, das unter diesen Umständen besonders nützlich ist, ist hex2dec

6

Angenommen, Sie haben Ihre ganze Zahl wie '1298925419114529174706173' als Dezimalstring gespeichert:

function dec2hex(str){ // .toString(16) only works up to 2^53 
    var dec = str.toString().split(''), sum = [], hex = [], i, s 
    while(dec.length){ 
     s = 1 * dec.shift() 
     for(i = 0; s || i < sum.length; i++){ 
      s += (sum[i] || 0) * 10 
      sum[i] = s % 16 
      s = (s - sum[i])/16 
     } 
    } 
    while(sum.length){ 
     hex.push(sum.pop().toString(16)) 
    } 
    return hex.join('') 
} 
+1

funktioniert für mich ... –

Verwandte Themen