Wie konvertieren von dezimal in hexadezimal in JavaScript
Wie rechnet man dezimal-Werte, um Ihre hexadezimale Entsprechung in JavaScript?
- Nur eine Warnung hier ist, dass Sie ausgehend von einer string-Repräsentation der sehr leicht zu verlieren Präzision, wenn Sie schalten Sie ihn in die Zahl, die als Teil der Umwandlung in hex. Siehe danvk.org/wp/2012-01-20/....
- Dieser - Funktion ist genau das, was Sie benötigen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren einer Zahl in eine hexadezimale Zeichenfolge mit:
Und den Prozess umkehren mit:
toString()
Parameter? Das ist für mich arbeiten, aber ich möchte format der string ein wenig. Nach MDN,toString()
nicht akzeptieren keine Parameter: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...Object.toString
. Sie müssenNumber.toString()
... developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...yourNumber
ist eine variable. Wenn Sie möchten, verwenden Sie ein numerisches literal, dann haben Sie, etwas zu tun, wie(45).toString(16)
, aber wenn Sie sind hart codiert eine Zahl, dann bitte einfach schreiben als hex-string selbst...(45).toString(16)
immer gleich'2d'
, also vergeuden Sie keine cpu-Zyklen, um das herauszufinden.SyntaxError: Unexpected token ILLEGAL
Sie haben, um die Zahl in Klammern.yourNumber
ist eine variable, nicht ein numerisches literal, und 2) warum sollte man nie eingeben müssen(16).toString(16)
var timeout = 45; ... doSomething(timeout.toString(16));
)42..toString(16)
toString(8)
undtoString(2)
- wie auch jede andere Basis, die Sie wählen sollten!42
ist das gleiche wie42.0
. Aber es ist legal das weglassen der null, und schreiben42.
. Also, wenn Sie schreiben42.toString(16)
die Zeit nicht gesehen, als ob Sie versuchen, eine Funktion aufzurufen, aber als Dezimaltrennzeichen. Eigentlich auch So zu nennen, eine Funktion, die Sie haben, um einen zusätzlichen Zeitraum nach dem Komma42 .toString(16)
parseInt(x,16)
?int(x, 16)
) oder java (Integer.parseInt(x, 16)
) oder gehen (strconv.ParseInt(x, 16, 64)
) oder fast jede andere Sprache.const parseHex = x => parseInt(x, 16)
und dann verwenden Sie es wieparseHex('ff')
gibt255
.Wenn Sie brauchen, um Dinge zu handhaben, wie die bit-Felder oder 32-bit-Farben, dann müssen Sie den Umgang mit zahlen signiert. Die JavaScript-Funktion
toString(16)
wird eine negative Rendite hexadezimale Zahl, die in der Regel nicht, was Sie wollen. Diese Funktion hat einige tolle Ergänzung, damit es eine positive Zahl ist.JS:
number = 0x100000000 + number;
>>>
Betreiber zu konvertieren Zahl in unsigned-Darstellung z.B.((-3253) >>> 0).toString(16)
zurück"fffff34b"
.Den code unten konvertieren Sie den Dezimalwert d hexadezimal. Es ermöglicht auch das hinzufügen Polsterung an der hexadezimale Ergebnis. Also 0 wird 00 standardmäßig.
function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }
const hex = d => Number(d).toString(16).padStart(2, '0')
?Mit Polsterung:
.substr(-4)
hier arbeiten?Zur Fertigstellung, wenn Sie wollen, dass die zweier-Komplement hexadezimale Darstellung einer negativen Zahl, die Sie verwenden können, die null-fill-rechts-shift
>>>
- operator. Zum Beispiel:Gibt es jedoch eine Beschränkung: JavaScript bitweise Operatoren behandeln Ihre Operanden als eine Sequenz von 32 bits, das heißt, Sie bekommen die 32-bit Zweierkomplement.
C# number to hexadecimal
produziert unterschiedliche Ergebnisse zuJavascript number to hexadecimal
. Es sieht aus wie Javascript hat das Problem mit negativen zahlen. Diese Antwort scheint die Lösung für das problem.Ohne Schleife:
Ist auch nicht es besser, nicht zu verwenden, loop-tests, die bewertet werden müssen?
Z. B. anstelle von:
haben
Kombination einiger dieser guten Ideen für ein RGB-Wert-zu-hexadezimal-Funktion (hinzufügen
#
anderswo für HTML/CSS):Akzeptiert die Antwort nicht berücksichtigen einstelligen zurückgegeben hexadezimal-codes. Dies kann einfach eingestellt werden durch:
und
Glaube ich, dass die obigen Antworten gepostet wurden mehrfach von anderen in der einen oder anderen form. Ich wickeln Sie diese in ein toHex () - Funktion wie folgt:
Beachten Sie, dass die numerischen regulären Ausdruck kamen aus 10+ Nützliche JavaScript Regular Expression-Funktionen zur Verbesserung Ihrer web-Anwendungen Effizienz.
Update: Nach dem Test das Ding ein paar mal fand ich einen Fehler (doppelte Anführungszeichen in der RegExp), so fixiert, dass ich. ALLERDINGS! Nach ein bisschen testen und Lesen Sie den Beitrag von almaz - ich erkannte, dass ich konnte nicht bekommen, die negativen zahlen zu arbeiten.
Weiter - ich habe einige Bücher zu Lesen, bis auf diese, und da alle JavaScript-zahlen gespeichert werden, 64 bit-Worten, egal was - ich habe versucht, ändern die numHex code ein, um die 64-bit-Wort. Aber es stellt sich heraus können Sie nicht tun. Wenn Sie "3.14159265" ALS ZAHL in eine variable - alle werden Sie in der Lage zu bekommen, ist die "3", weil der gebrochene Teil ist nur zugänglich durch die Multiplikation der Zahl von zehn(SPRICH:10.0) wiederholt. Oder anders gesagt - die hexadezimale Wert 0xF Ursachen der floating point Wert, übersetzt zu werden in eine integer, bevor es ANDed, die löscht alles hinter der Zeit. Anstatt den Wert als ganzes (d.h.: 3.14159265) und und-Verknüpfung der floating point Wert gegen den Wert 0xF.
Also das beste, was zu tun ist, in diesem Fall, ist die Umwandlung von 3.14159265 in eine string und dann einfach konvertieren Sie die Zeichenfolge. Aufgrund der oben genannten, es macht es auch einfach zu konvertieren negativen zahlen, weil das minus-Zeichen wird einfach 0x26 auf der Vorderseite der Wert.
Also, was ich Tat, war auf die Bestimmung, dass die variable eine Zahl enthält - nur es in einen string konvertieren, und konvertieren Sie die Zeichenfolge. Dies bedeutet, alle, die auf der server-Seite müssen Sie unhex den eingehenden string und dann zu bestimmen, die eingehenden Informationen ist numerisch. Sie können das leicht tun, indem Sie nur ein "#" an die front von zahlen und "A" auf der Vorderseite, an der eine Zeichenkette zurück kommen. Finden Sie die toHex () - Funktion.
Spaß haben!
Nach einem weiteren Jahr und viel nachdenken habe ich beschlossen, dass die "toHex" - Funktion (und ich habe auch einen "fromHex" - Funktion) wirklich nötig überarbeitet werden. Die ganze Frage war: "Wie kann ich das effizienter machen?" Ich entschied, dass ein vom/hexadezimal-Funktion sollte sich nicht darum kümmern, wenn etwas ist, einen Bruch, aber zur gleichen Zeit es sollte sicherstellen, dass die Bruch-Teile sind im string enthalten.
Also dann die Frage geworden ist, "Wie tun Sie wissen, Sie arbeiten mit einem hexadezimal-string?". Die Antwort ist einfach. Verwenden Sie die standard-pre-string Informationen, die bereits auf der ganzen Welt anerkannt.
In anderen Worten, verwenden Sie "0x". So nun meine toHex-Funktion sucht, um zu sehen, ob das schon da ist und wenn es ist - es gibt den string, der gesendet wurde, um es. Andernfalls konvertiert die Zeichenfolge, eine Zahl, was auch immer. Hier ist die überarbeitete toHex Funktion:
/////////////////////////////////////////////////////////////////////////////
//toHex(). Konvertiert einen ASCII-string in hexadezimal.
/////////////////////////////////////////////////////////////////////////////
toHex(s)
{
if (s.substr(0,2).toLowerCase() == "0x") {
return s;
}
Dies ist eine sehr schnelle Funktion, die berücksichtigt, die einzelnen Ziffern, Gleitkomma-zahlen, und auch überprüft, um zu sehen, ob die person sendet einen hex-Wert über verhext wieder. Es verwendet nur vier Funktionsaufrufe und nur zwei von denen sind in der Schleife. Un-hex die Werte, die Sie verwenden:
Wie die toHex () - Funktion, die fromHex () - Funktion sucht zuerst nach dem "0x" und dann ist es übersetzt die eingehenden Informationen in einen string, wenn es nicht bereits ein string. Ich weiß nicht, wie es wäre ein string - aber nur für den Fall - ich check. Die Funktion geht dann durch, packte zwei Zeichen und die übersetzung in ASCII-Zeichen. Wenn Sie möchten, es zu übersetzen, Unicode, ändern Sie bitte die Schleife geht durch vier(4) Zeichen in einer Zeit. Aber dann müssen Sie auch, um sicherzustellen, dass der string NICHT durch vier teilbar ist. Wenn es - dann ist es ein standard-hexadezimal-string aus. (Denken Sie daran die Zeichenfolge "0x" auf der Vorderseite des es.)
Ein einfaches test-script zu zeigen, dass -3.14159265, wenn in einen string konvertiert, ist noch -3.14159265.
Weil, wie JavaScript funktioniert in Bezug auf die toString () - Funktion, die alle diese Probleme beseitigt werden können, die bisher Probleme verursacht. Nun sind alle strings und zahlen können leicht konvertiert werden. Weiter, solche Dinge als Objekte führt zu einem Fehler, werden generiert durch JavaScript selbst. Ich glaube, das ist in etwa so gut wie es geht. Die einzige Verbesserung, die linke ist für W3C so, dass es nur eine toHex() und fromHex () - Funktion in JavaScript.
if( s.substr(0,2)
vorif (typeof s != "string")
wahrscheinlich nicht, was Sie wollen, zum Beispiel. Was ich zurückgekehrt war, war nicht das, was ich erwartet, dass entweder (toHex(0x1f635)
gibt"0x313238353635"
). Haben nicht weiter untersucht.substr
&toLowerCase
auf einem nicht-string... also entweder dietypeof
muss früher kommen, oder, wenn Sie erwarten, dasstoHex
zu werfen, die auf einem nicht-string-Recht gibt, sollten Sie entfernen dastypeof
check komplett. Sinn? Das ist, wenn ich den code hier ohne änderungen, und rieftoHex(0x1f635)
, ich würde zu bekommenUncaught TypeError: s.substr is not a function
. Wenn ich den string-Umwandlung früher, du hast Recht, die Reihe wirft zu dezimal ersten, vielleicht, und Dinge, die seitwärts gehen. Was natürlich bedeutet, Sie können nicht einfach hier gewirkt, wenns
ist kein string.Die 16 ist die radix, und es gibt 16 Werte in eine hexadezimale Zahl 🙂
Eingeschränkt/aufgefüllt, um eine festgelegte Anzahl von Zeichen:
color: rgb(r,g,b)
wobei r g und b sind in dezimal-zahlen.function decimalToHexString(i) { var result = "00"; if (i >= 0 && i <= 15) { result += "000" + i.toString(16); } else if (i >= 16 && i <= 255) { result += "00" + i.toString(16); } else if (i >= 256 && i <= 4095) { result += "0" + i.toString(16); } else if (i >= 4096 && i <= 65535) { result += i.toString(16); } return result }
Wenn Sie möchten, um zu konvertieren eine Zahl in eine hexadezimale Darstellung einer RGBA-Farbe Wert ist, ich habe festgestellt, dass dies die nützlichste Kombination aus mehreren Tipps von hier:
AFAIK Kommentar 57807 ist falsch und sollte so etwas wie:
var hex = Zahl(d).toString(16);
statt
var hex = parseInt(T, 16);
Für alle interessierten, hier ein JSFiddle Vergleich die meisten Antworten auf diese Frage.
Und hier ist die Methode, die ich landete mit:
Auch, Bedenken Sie, dass, wenn Sie schauen, um zu konvertieren von dezimal zu hex für die Verwendung in CSS als Farbe Datentyp, könnten Sie stattdessen lieber zu extrahieren, die RGB-Werte aus dem dezimal-und verwenden rgb().
Beispielsweise (JSFiddle):
Diese Sätze
#some-element
's CSScolor
Eigenschaftrgb(64, 62, 154)
.Hier ist eine abgespeckte ECMAScript 6 version:
Und wenn die Zahl negativ ist?
Hier ist meine version.
Können Sie die folgenden JsFiddle-Beispiel oder Stack Overflow JavaScript-Beispiel-code als auch.
JS:
Ich mache die Konvertierung zu hex string in eine schöne, große Schleife, also versuchte ich verschiedene Techniken, um zu finden, die Schnellste. Meine Anforderungen waren, dass eine Zeichenfolge fester Länge als Ergebnis, und Kodieren negative Werte richtig (-1 => ff..f).
Einfach
.toString(16)
hat bei mir nicht funktioniert, da ich brauchte, negative Werte werden korrekt codiert. Der folgende code ist der Schnellste den ich getestet habe bisher 1-2-byte-Werte (beachten Sie, dasssymbols
definiert die Anzahl der output-Symbole, die Sie möchten, zu bekommen, dass ist für 4-byte-integer sollte es gleich 8):Führt es schneller als
.toString(16)
auf 1-2 byte-zahlen und langsamer bei größeren zahlen (wennsymbols
>= 6), aber sollte noch zu übertreffen, Methoden, Kodieren für negative Werte richtig.Als die akzeptierte Antwort, die Staaten, die einfachste Möglichkeit zum konvertieren von dezimal in hexadezimal ist
var hex = dec.toString(16)
. Allerdings können Sie es vorziehen, fügen Sie einen string-Konvertierung, wie es stellt sicher, dass die string-Darstellungen wie"12".toString(16)
richtig funktionieren.Den Prozess umkehren Sie können auch die Lösung unten, da ist es sogar noch kürzer.
Scheint es langsamer zu sein in Google Chrome und Firefox, ist aber deutlich schneller in der Oper. Sehen http://jsperf.com/hex-to-dec.
Wie konvertieren von dezimal in hexadezimal in JavaScript
War ich nicht in der Lage zu finden eine Brutal reinigen/einfache dezimal zu hexadezimal Konvertierung, die nicht bedeuten, ein Durcheinander von Funktionen und arrays ... also ich musste das für mich.
Um das alles zusammenzufassen;
Jedoch, wenn Sie nicht brauchen, um Sie zu konvertieren zurück zu einem integer-am Ende (z.B. für Farben), dann nur sicherstellen, dass die Werte nicht negativ werden müsste.
Habe ich nicht gefunden eine klare Antwort, ohne überprüft, ob es negativ oder positiv ist, verwendet Zweierkomplement (negative zahlen enthalten). Dafür zeige ich meine Lösung für ein byte:
Können Sie verwenden diese Anweisung, um eine beliebige Anzahl bytes, nur fügen Sie
FF
in den jeweiligen Orten. Zum Beispiel, um zwei bytes:Wenn Sie möchten, werfen ein array von integer in string, hexadezimal:
In den Fall, Sie schauen, um zu konvertieren, um eine "volle" JavaScript-oder CSS-Darstellung, die Sie verwenden können, so etwas wie:
Können Sie etwas tun, wie dies in ECMAScript 6:
Wenn Sie auf der Suche für die Konvertierung Großer Ganzzahlen, D. H. Zahlen, die größer Anzahl.MAX_SAFE_INTEGER -- 9007199254740991, dann können Sie verwenden Sie den folgenden code
JS:
Hier ist meine Lösung:
Die Frage sagt: "konvertieren dezimal zu hexadezimal in JavaScript". Während die Frage, nicht angeben, dass der hexadezimal-string sollte beginnen mit 0x prefix, wer code schreibt, sollte wissen, dass 0x Hinzugefügt hexadezimal-codes zu unterscheiden hexadezimal-codes von programmatischen Bezeichner und anderen zahlen (1234 sein könnte, hexadezimal, dezimal, oder sogar oktal).
Daher richtig beantworten diese Frage, für die Zwecke der Skript-schreiben, müssen Sie den 0x-Präfix.
Die Mathematik.abs(N) - Funktion wandelt negative zum positiven, und als bonus, es sieht nicht wie jemand, lief es über eine Holz-chipper.
Die Antwort, die ich wollte, hätte ein Feld-Breite Bezeichner, so konnten wir zum Beispiel zeigen, 8/16/32/64-bit-Werte, die Art und Weise, die Sie würden sehen, wie Sie aufgeführt sind in eine hexadezimale editing-Anwendung. Das ist die eigentliche, richtige Antwort.
Number('0xFF') === 255;
für alles, was Sie Leute da draußen, die wollen den umgekehrten Vorgang.