Wie konvertiert man Dezimalwerte in JavaScript in ihre hexadezimale Entsprechung?
javascript
hex
tostring
base
number-formatting
Luke Smith
quelle
quelle
Antworten:
Konvertieren Sie eine Zahl in eine hexadezimale Zeichenfolge mit:
Und kehren Sie den Prozess um mit:
quelle
yourNumber
ist eine Variable. Wenn Sie ein numerisches Literal verwenden möchten, müssen Sie so etwas tun(45).toString(16)
, aber wenn Sie eine Zahl hart codieren, schreiben Sie sie bitte selbst als Hex-Zeichenfolge ...(45).toString(16)
wird immer gleich sein'2d'
, verschwenden Sie also keine CPU Zyklen, um das herauszufinden.42..toString(16)
Wenn Sie mit Bitfeldern oder 32-Bit-Farben umgehen müssen, müssen Sie sich mit vorzeichenbehafteten Zahlen befassen. Die JavaScript-Funktion
toString(16)
gibt eine negative Hexadezimalzahl zurück, die normalerweise nicht Ihren Wünschen entspricht. Diese Funktion macht eine verrückte Addition, um daraus eine positive Zahl zu machen.quelle
number = 0x100000000 + number;
>>>
Operator verwenden, um Zahlen in vorzeichenlose Darstellungen umzuwandeln, z . B.((-3253) >>> 0).toString(16)
Rückgaben"fffff34b"
.+1
Für eine nützliche Ergänzung, aber wenn Sie Zahlen in eine andere Notation konvertieren, sind alle Zahlen "normalerweise" bereits positiv, oder Sie möchten negative Ergebnisse.Der folgende Code konvertiert den Dezimalwert d in hexadezimal. Außerdem können Sie dem hexadezimalen Ergebnis eine Auffüllung hinzufügen. Aus 0 wird also standardmäßig 00.
quelle
quelle
function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }
const hex = d => Number(d).toString(16).padStart(2, '0')
NinFür Vollständigkeit, wenn Sie das wollen Zweierkomplement- hexadezimale Darstellung einer negativen Zahl, können Sie das verwenden Null-Füll-Verschiebung nach rechts
>>>
Operator . Zum Beispiel:Es gibt jedoch eine Einschränkung: Bitweise JavaScript-Operatoren behandeln ihre Operanden als eine Folge von 32 Bit , dh Sie erhalten das 32-Bit-Zweierkomplement.
quelle
C# number to hexadecimal
es zu unterschiedlichen Ergebnissen kamJavascript number to hexadecimal
. Es sieht so aus, als hätte Javascript das Problem mit negativen Zahlen. Diese Antwort scheint die Lösung des Problems zu sein.((-2)>>>0).toString(16).substring(2)
Mit Polsterung:
quelle
Ohne die Schleife:
Ist es auch nicht besser, keine Schleifentests zu verwenden, die ausgewertet werden müssen?
Zum Beispiel anstelle von:
haben
quelle
Kombinieren Sie einige dieser guten Ideen für eine RGB-Wert-zu-Hexadezimal-Funktion (fügen Sie die
#
andere für HTML / CSS hinzu):quelle
Die akzeptierte Antwort berücksichtigte keine einstelligen Hexadezimalcodes. Dies lässt sich leicht einstellen durch:
und
Ich glaube, die obigen Antworten wurden mehrfach von anderen in der einen oder anderen Form veröffentlicht. Ich verpacke diese in eine toHex () - Funktion wie folgt:
Beachten Sie, dass der numerische reguläre Ausdruck aus 10+ nützlichen Funktionen für reguläre JavaScript-Ausdrücke stammt, um die Effizienz Ihrer Webanwendungen zu verbessern .
Update: Nachdem ich dieses Ding mehrmals getestet hatte, fand ich einen Fehler (doppelte Anführungszeichen in RegExp), also habe ich das behoben. JEDOCH! Nachdem ich einige Tests durchgeführt und den Beitrag von almaz gelesen hatte, wurde mir klar, dass ich keine negativen Zahlen zum Laufen bringen konnte.
Weiter - ich habe etwas darüber gelesen und da alle JavaScript-Nummern als 64-Bit-Wörter gespeichert sind, habe ich versucht, den numHex-Code zu ändern, um das 64-Bit-Wort zu erhalten. Aber es stellt sich heraus, dass Sie das nicht können. Wenn Sie "3.14159265" ALS NUMMER in eine Variable eingeben, erhalten Sie nur die "3", da auf den Bruchteil nur zugegriffen werden kann, indem Sie die Zahl wiederholt mit zehn (IE: 10.0) multiplizieren. Oder anders ausgedrückt: Der Hexadezimalwert von 0xF bewirkt, dass der Gleitkommawert in eine Ganzzahl übersetzt wird, bevor er UND-verknüpft wird, wodurch alles hinter der Periode entfernt wird. Anstatt den Wert als Ganzes zu nehmen (dh: 3.14159265) und den Gleitkomma UND zu verknüpfen gegen den 0xF-Wert UND zu verknüpfen.
In diesem Fall ist es am besten, den 3.14159265 in einen String umzuwandeln und dann einfach den String zu konvertieren. Aus diesem Grund ist es auch einfach, negative Zahlen umzuwandeln, da das Minuszeichen auf der Vorderseite des Werts nur 0x26 wird.
Ich habe also festgestellt, dass die Variable eine Zahl enthält - konvertieren Sie sie einfach in eine Zeichenfolge und konvertieren Sie die Zeichenfolge. Dies bedeutet für alle, dass Sie auf der Serverseite die eingehende Zeichenfolge entfernen und dann feststellen müssen, dass die eingehenden Informationen numerisch sind. Sie können dies einfach tun, indem Sie einfach ein "#" an die Vorderseite der Zahlen und ein "A" an die Vorderseite einer Zeichenfolge einfügen, die zurückkommt. Siehe die Funktion toHex ().
Habe Spaß!
Nach einem weiteren Jahr und viel Nachdenken entschied ich, dass die "toHex" -Funktion (und ich habe auch eine "fromHex" -Funktion) wirklich überarbeitet werden musste. Die ganze Frage war: "Wie kann ich das effizienter machen?" Ich entschied, dass eine to / from-Hexadezimalfunktion sich nicht darum kümmern sollte, ob etwas ein Bruchteil ist, aber gleichzeitig sicherstellen sollte, dass Bruchteile in der Zeichenfolge enthalten sind.
Dann stellte sich die Frage: "Woher wissen Sie, dass Sie mit einer hexadezimalen Zeichenfolge arbeiten?". Die Antwort ist einfach. Verwenden Sie die Standardinformationen vor der Zeichenfolge, die weltweit bereits anerkannt sind.
Mit anderen Worten - verwenden Sie "0x". Meine toHex-Funktion prüft nun, ob dies bereits vorhanden ist und ob dies der Fall ist. Sie gibt nur die Zeichenfolge zurück, die an sie gesendet wurde. Andernfalls wird die Zeichenfolge, die Nummer usw. konvertiert. Hier ist die überarbeitete toHex-Funktion:
Dies ist eine sehr schnelle Funktion, die einzelne Ziffern, Gleitkommazahlen und sogar prüft, ob die Person einen Hex-Wert sendet, um ihn erneut zu hexen. Es werden nur vier Funktionsaufrufe verwendet, von denen sich nur zwei in der Schleife befinden. So entsperren Sie die verwendeten Werte:
Wie die Funktion toHex () sucht die Funktion fromHex () zuerst nach "0x" und übersetzt dann die eingehenden Informationen in eine Zeichenfolge, wenn es sich nicht bereits um eine Zeichenfolge handelt. Ich weiß nicht, wie es kein String wäre - aber nur für den Fall - ich überprüfe. Die Funktion geht dann durch, greift nach zwei Zeichen und übersetzt diese in ASCII-Zeichen. Wenn Sie möchten, dass Unicode übersetzt wird, müssen Sie die Schleife so ändern, dass sie jeweils vier (4) Zeichen umfasst. Dann müssen Sie aber auch sicherstellen, dass die Zeichenfolge NICHT durch vier teilbar ist. Wenn ja, dann ist es eine hexadezimale Standardzeichenfolge. (Denken Sie daran, dass die Zeichenfolge vorne "0x" hat.)
Ein einfaches Testskript, das zeigt, dass -3.14159265 bei der Konvertierung in eine Zeichenfolge immer noch -3.14159265 ist.
Aufgrund der Funktionsweise von JavaScript in Bezug auf die Funktion toString () können alle Probleme behoben werden, die zuvor Probleme verursacht haben. Jetzt können alle Zeichenfolgen und Zahlen einfach konvertiert werden. Darüber hinaus verursachen Objekte wie Objekte einen Fehler, der von JavaScript selbst generiert wird. Ich glaube, das ist ungefähr so gut wie es nur geht. Die einzige verbleibende Verbesserung besteht darin, dass W3C nur die Funktionen toHex () und fromHex () in JavaScript enthält.
quelle
if( s.substr(0,2)
bevor es zum Beispielif (typeof s != "string")
wahrscheinlich nicht das ist, was Sie wollen. Was ich zurückgegeben hatte, war auch nicht das, was ich erwartet hatte (toHex(0x1f635)
gibt"0x313238353635"
). Habe nicht weiter untersucht.substr
& nichttoLowerCase
für eine Nicht-Zeichenfolge verwenden können. Entweder müssen dietypeof
Anforderungen früher gestellt werden, oder wenn Sie erwartet habentoHex
, genau dort eine Nicht-Zeichenfolge zu verwenden, sollten Sie dentypeof
Scheck vollständig entfernen . Sinn ergeben? Das heißt, wenn ich den Code hier ohne Änderungen verwenden und anrufentoHex(0x1f635)
würde, würde ich bekommenUncaught TypeError: s.substr is not a function
. Wenn ich die Zeichenfolge früher verschiebe, haben Sie Recht, die Zahl wird möglicherweise zuerst auf Dezimalzahl umgewandelt, und die Dinge gehen seitwärts. Was natürlich bedeutet, dass Sie hier keine einfache Besetzung machen können, wenns
es sich nicht um eine Zeichenfolge handelt.Die 16 ist der Radix und es gibt 16 Werte in einer Hexadezimalzahl :-)
quelle
Für alle Interessierten gibt es hier eine JSFiddle, die die meisten Antworten auf diese Frage vergleicht .
Und hier ist die Methode, mit der ich am Ende angefangen habe:
Auch bedenken , dass , wenn Sie schauen aus Dezimalzahl in hex zur Verwendung in CSS als konvertieren Farbe Datentyp , können Sie stattdessen lieber die RGB - Werte aus dem Dezimalsystem und Verwendung extrahieren rgb () .
Zum Beispiel ( JSFiddle ):
Dies setzt
#some-element
die CSS-color
Eigenschaft aufrgb(64, 62, 154)
.quelle
Auf eine festgelegte Anzahl von Zeichen beschränkt / aufgefüllt:
quelle
Hier ist eine abgespeckte ECMAScript 6-Version:
quelle
quelle
color: rgb(r,g,b)
wobei rg und b Dezimalzahlen sind.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 eine Zahl in eine hexadezimale Darstellung eines RGBA-Farbwerts konvertieren möchten, ist dies die nützlichste Kombination mehrerer Tipps von hier:
quelle
AFAIK- Kommentar 57807 ist falsch und sollte ungefähr so lauten: var hex = Number (d) .toString (16); anstelle von var hex = parseInt (d, 16);
quelle
Und wenn die Zahl negativ ist?
Hier ist meine Version.
quelle
Ich konvertiere in eine ziemlich große Schleife in einen Hex-String, also habe ich verschiedene Techniken ausprobiert, um die schnellste zu finden. Meine Anforderungen waren, eine Zeichenfolge fester Länge zu haben und negative Werte richtig zu codieren (-1 => ff..f).
Simple
.toString(16)
hat bei mir nicht funktioniert, da ich negative Werte brauchte, um richtig codiert zu werden. Der folgende Code ist der schnellste, den ich bisher mit 1-2-Byte-Werten getestet habe (Hinweis,symbols
der die Anzahl der Ausgabesymbole definiert, die Sie erhalten möchten, dh für eine 4-Byte-Ganzzahl sollte er gleich 8 sein):Es ist schneller als
.toString(16)
bei 1-2-Byte-Zahlen und langsamer bei größeren Zahlen (wennsymbols
> = 6), sollte jedoch Methoden übertreffen, die negative Werte richtig codieren.quelle
Wie in der akzeptierten Antwort angegeben, ist die Konvertierung von dezimal nach hexadezimal am einfachsten
var hex = dec.toString(16)
. Möglicherweise möchten Sie jedoch lieber eine Zeichenfolgenkonvertierung hinzufügen, da dadurch sichergestellt wird, dass Zeichenfolgendarstellungen wie"12".toString(16)
korrekt funktionieren.Um den Vorgang umzukehren, können Sie auch die folgende Lösung verwenden, da diese noch kürzer ist.
In Google Chrome und Firefox scheint es langsamer zu sein, in Opera jedoch deutlich schneller. Siehe http://jsperf.com/hex-to-dec .
quelle
Konvertieren von Dezimalzahlen in Hexadezimalzahlen in JavaScript
Ich war nicht in der Lage, eine brutal saubere / einfache Konvertierung von Dezimal zu Hexadezimal zu finden, die keine Unordnung von Funktionen und Arrays beinhaltete ... also musste ich dies für mich selbst machen.
quelle
Um alles zusammenzufassen;
Wenn Sie es jedoch am Ende nicht wieder in eine Ganzzahl konvertieren müssen (dh für Farben), sollte es ausreichen, nur sicherzustellen, dass die Werte nicht negativ sind.
quelle
Ich habe keine klare Antwort gefunden, ohne zu prüfen, ob sie negativ oder positiv ist und das Zweierkomplement verwendet (einschließlich negativer Zahlen). Dafür zeige ich meine Lösung auf ein Byte:
Sie können diese Anweisung für eine beliebige Anzahl von Bytes verwenden, die Sie nur
FF
an den entsprechenden Stellen hinzufügen . Zum Beispiel auf zwei Bytes:Wenn Sie eine Array-Ganzzahl in eine hexadezimale Zeichenfolge umwandeln möchten:
quelle
Wenn Sie in eine 'vollständige' JavaScript- oder CSS-Darstellung konvertieren möchten, können Sie Folgendes verwenden:
quelle
In ECMAScript 6 können Sie Folgendes tun :
quelle
Wenn Sie große Ganzzahlen konvertieren möchten, dh Zahlen größer als Number.MAX_SAFE_INTEGER - 9007199254740991, können Sie den folgenden Code verwenden
quelle
Dies basiert auf den Lösungen von Prestaul und Tod. Dies ist jedoch eine Verallgemeinerung, die die unterschiedliche Größe einer Variablen berücksichtigt (z. B. Analysieren des vorzeichenbehafteten Werts aus einem seriellen Protokoll eines Mikrocontrollers).
Testskript:
Testergebnisse:
Hinweis: Nicht sicher, warum es über 32 Bit Größe fehlschlägt
quelle
Hier ist meine Lösung:
Die Frage lautet: "Wie konvertiere ich Dezimal in Hexadezimal in JavaScript" . Während die Frage nicht angibt, dass die hexadezimale Zeichenfolge mit einem 0x-Präfix beginnen soll, sollte jeder, der Code schreibt, wissen, dass hexadezimalen Codes 0x hinzugefügt wird, um hexadezimale Codes von programmatischen Bezeichnern und anderen Zahlen zu unterscheiden (1234 kann hexadezimal, dezimal oder sein) sogar oktal).
Um diese Frage richtig zu beantworten, müssen Sie zum Schreiben von Skripten das Präfix 0x hinzufügen.
Die Math.abs (N) -Funktion wandelt Negative in Positive um, und als Bonus sieht es nicht so aus, als hätte jemand sie durch einen Holzhacker laufen lassen.
Die Antwort, die ich wollte, hätte einen Feldbreitenspezifizierer gehabt, so dass wir beispielsweise 8/16/32/64-Bit-Werte so anzeigen könnten, wie Sie sie in einer hexadezimalen Bearbeitungsanwendung sehen würden. Das ist die eigentliche, richtige Antwort.
quelle
Number('0xFF') === 255;
für alle Leute da draußen, die die umgekehrte Operation wollen.