2016-08-09 43 views
1

Das ist ziemlich seltsam, nicht wahr? Wenn ich mich nur an 0-9 erinnere, stellen die Buchstaben A, B, C, D, E, F einen hexadezimalen Wert dar. Wie kommt es, dass ABCDEFGHAIJ eine hexadezimale Darstellung hat?Parsing Zeichenfolge Wert in JavaScript

Parsing string to hex number in javascript.

+2

'parseInt ("abcdefghi", 16) bricht bei dem ersten Nicht-Hexa-Zeichen, auf das es trifft, auf. Also, was Sie bekommen, ist '0xABCDEF' – Arnauld

+0

Wenn nur [einige Doco für' parseInt() '] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseInt). .. – nnnnnn

+0

Beispiel [fiddle] (https://jsfiddle.net/RajeshDixit/y8ayx3w8/) für @ Arnaulds Kommentar – Rajesh

Antwort

1

Wie in den Kommentaren von epascarello erwähnt, hier ist der relevante Teil der MDN documentation dieses Verhalten zu erklären:

Wenn ParseInt ein Zeichen trifft, die nicht eine Zahl im ist spezifizierte Radix, ignoriert es und alle nachfolgenden Zeichen und gibt den Ganzzahlwert zurück, der bis zu diesem Punkt analysiert wurde. parseInt schneidet Zahlen zu ganzzahligen Werten ab. Führende und nachfolgende Leerzeichen sind zulässig.

Folglich parseInt("abcdefghij", 16) wird analysieren tatsächlich "abcdef" und dort anhalten. Daher ist das Ergebnis:

0xABCDEF = 11259375 

Mit diesem Wissen, können Sie eine benutzerdefinierte Funktion verwenden, anstatt NaN zurückkehren, wenn sie mit einem nicht-Hexadezimalstring aufgerufen:

function parseTrueHexa(str) { 
 
    return str.match(/^ *[a-f0-9]+ *$/i) ? parseInt(str, 16) : NaN; 
 
} 
 

 
console.log("parseInt() says:"); 
 
console.log(parseInt("aBcD", 16)); 
 
console.log(parseInt("abcdz", 16)); 
 

 
console.log("parseTrueHexa() says:"); 
 
console.log(parseTrueHexa("aBcD")); 
 
console.log(parseTrueHexa("abcdz"));