Die API
So konvertieren Sie eine Hex-Zeichenfolge in eine Zahl:
parseInt(string, radix)
Zeichenfolge: Erforderlich. Die zu analysierende Zeichenfolge
radix: Optional. Eine Zahl (von 2 bis 36), die das zu verwendende Zahlensystem darstellt
So konvertieren Sie von einer Zahl in eine Hex-Zeichenfolge:
NumberObject.toString(radix)
- radix: Optional. Gibt den Basisradix an, unter dem die Nummer angezeigt werden soll.
Beispiel Radix-Werte:
- 2 - Die Zahl wird als Binärwert angezeigt
- 8 - Die Zahl wird als Oktalwert angezeigt
- 16 - Die Zahl wird als Hexadezimalwert angezeigt
Beispiel Verwendung
Ganzzahliger Wert für hex:
var i = 10;
console.log( i.toString(16) );
Hex-Zeichenfolge zu ganzzahligem Wert:
var h = "a";
console.log( parseInt(h, 16) );
Ganzzahliger Wert in Dezimalzahl:
var d = 16;
console.log( d.toString(10) );
toString
geworfen wirdRangeError
. Große Basen sind eindeutig nicht sinnvoll, um sie als Zeichen darzustellen.Ich bin zu diesem Beitrag gekommen und musste von Basis 10 auf 62 und umgekehrt konvertieren. Obwohl die Lösungen hier großartig sind
parseInt
undtoString
nur Basis 2 bis 36 unterstützen. Wenn sich also jemand in einer ähnlichen Position befindet wie ich und Basis 2 bis 62 benötigt, habe ich meine Lösung unten eingefügt.https://gist.github.com/ryansmith94/91d7fd30710264affeb9
function convertBase(value, from_base, to_base) { var range = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/'.split(''); var from_range = range.slice(0, from_base); var to_range = range.slice(0, to_base); var dec_value = value.split('').reverse().reduce(function (carry, digit, index) { if (from_range.indexOf(digit) === -1) throw new Error('Invalid digit `'+digit+'` for base '+from_base+'.'); return carry += from_range.indexOf(digit) * (Math.pow(from_base, index)); }, 0); var new_value = ''; while (dec_value > 0) { new_value = to_range[dec_value % to_base] + new_value; dec_value = (dec_value - (dec_value % to_base)) / to_base; } return new_value || '0'; }
quelle
1.3
in Base 64 konvertieren ?dec_value % to_base
Zahlen in JavaScript @expert zu tun hat, da der Fehler durch große Zahlen verursacht wird , aber ich kann ihn anscheinend nicht für kleinere Zahlen reproduzieren.Sie können den folgenden Code ausprobieren, der auch Zahlen mit beliebiger Genauigkeit unterstützt (größer als 2 ^ 53).
function convertBase(str, fromBase, toBase) { const DIGITS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"; const add = (x, y, base) => { let z = []; const n = Math.max(x.length, y.length); let carry = 0; let i = 0; while (i < n || carry) { const xi = i < x.length ? x[i] : 0; const yi = i < y.length ? y[i] : 0; const zi = carry + xi + yi; z.push(zi % base); carry = Math.floor(zi / base); i++; } return z; } const multiplyByNumber = (num, x, base) => { if (num < 0) return null; if (num == 0) return []; let result = []; let power = x; while (true) { num & 1 && (result = add(result, power, base)); num = num >> 1; if (num === 0) break; power = add(power, power, base); } return result; } const parseToDigitsArray = (str, base) => { const digits = str.split(''); let arr = []; for (let i = digits.length - 1; i >= 0; i--) { const n = DIGITS.indexOf(digits[i]) if (n == -1) return null; arr.push(n); } return arr; } const digits = parseToDigitsArray(str, fromBase); if (digits === null) return null; let outArray = []; let power = [1]; for (let i = 0; i < digits.length; i++) { digits[i] && (outArray = add(outArray, multiplyByNumber(digits[i], power, toBase), toBase)); power = multiplyByNumber(fromBase, power, toBase); } let out = ''; for (let i = outArray.length - 1; i >= 0; i--) out += DIGITS[outArray[i]]; return out; }
Verwendung:
console.log(convertBase("5a2a9c826c75045be9ba8fbffc80c6f25a2a9c826c75045be9ba8fbffc80c6f2",16,64)); // Returns: 5EGD89ItghrWrGfL/O0NL9qaFO2r7k4m+CWzX/YwcrO console.log(convertBase("5EGD89ItghrWrGfL/O0NL9qaFO2r7k4m+CWzX/YwcrO",64,16)); // Returns: 5a2a9c826c75045be9ba8fbffc80c6f25a2a9c826c75045be9ba8fbffc80c6f2
Der Basiscode wurde gefunden, hier , ich habe ein bisschen es verbessert auch 64 bis Base bis zu unterstützen.
quelle
Das folgende Diagramm könnte helfen. Beachten Sie, dass Sie zum Konvertieren von Basis 16 in Basis 2 zuerst in Basis 10 und dann in Basis 2 konvertieren müssen.
quelle
Nun, ich habe eine Funktion erstellt, die von Basis 10 auf jede Basis übersetzt werden kann. (Dies hängt davon ab, wie viele Zeichenfolgen Sie im Array
A
haben. Wenn es mehr als das + 10 sind, gehen ihm die Symbole aus.) Und ich habe fast geweint, als ich herausfand, dass Sie es mit weniger als 10 Zeichen schaffen könnten. .Fügen Sie ein Lesezeichen hinzu und fügen Sie es als URL ein ... Ich habe es auf lange, aber persönliche Weise gemacht. Zumindest kann meine eine Basis verwenden, die höher als 36 ist. Sie können selbst mehr Symbole hinzufügen, aber wenn Sie möchten, kann ich es für Sie machen ...
var X = prompt("Choose your number"); var Y = prompt("Choose your base"); var Z = []; var M = -1; var A = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; var B = function() { for (i = X; 0 < i; i = Math.floor(i / Y)) { if(i % Y >= 10) { Z.push(A[i % Y - 10]); } else { Z.push(i % Y); } M = M + 1; } for (j = M; j >= 0; j--) { document.write(Z[j]); } }; B(); // Call function
quelle
-1
zur Basis zu konvertieren10
.Geben Sie den Radix an, den Sie als Parameter verwenden möchten.
HINWEIS: Dies funktioniert nur zum Konvertieren von Basen 2-36 in Dezimal- und kleine Werte.
parseInt(string, radix) parseInt("80", 10) // results in 80 parseInt("80", 16) // results in 128 // etc
Über „kleine“,
parseInt("6f", 32)
ist in Ordnung (= 207),aber auch jede andere etwas größer wird auch 207
6f1
,6f11
...quelle
between different bases
. (Ich habe keinen Zweifel, das hat Sie in diesen sechs JahrenNormalerweise benutze ich diese Funktion, um von verschiedenen Basen zu konvertieren.
Beispielsweise wird "11111111" für beide Fälle zurückgegeben: convertBase ("ff", 16, 2) oder convertBase (0xFF, 16, 2)
var convertBase = function(val, base1, base2) { if (typeof(val) == "number") { return parseInt(String(val)).toString(base2); } else { return parseInt(val.toString(), base1).toString(base2) }; }
quelle
Diese Funktion generiert eine Dezimalzahl für jede Basis von 2 bis 36. (wie bei Javascript)
Sie können die Basis jedoch um mehr als 36 erhöhen, indem Sie einfach ein neues Zeichen in
keys[]
Kleinbuchstaben ["a", "b"] hinzufügen.function toBase(num, radix = 10) { // only i64 numbers var keys = ['🤢', '😃', 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; if (!(radix >= 2 && radix <= keys.length)) throw new RangeError("toBase() radix argument must be between 2 and " + keys.length) if (num < 0) var isNegative = true if (isNaN(num = Math.abs(+num))) return NaN let output = []; do { let index = num % radix; output.unshift(keys[index]); num = Math.trunc(num / radix); } while (num != 0); if (isNegative) output.unshift('-') return output.join(""); } console.log(toBase("100",2))
quelle
Ich habe eine Funktion zum Konvertieren einer JavaScript-Zeichenfolge von einer Basis in eine andere Basis geschrieben, wobei die ursprüngliche Basis und die neue Basis als Parameter angegeben wurden.
function convertFromBaseToBase(str, fromBase, toBase){ var num = parseInt(str, fromBase); return num.toString(toBase); } alert(convertFromBaseToBase(10, 2, 10));
quelle
Verwenden der parseInt- Funktion:
var noInBase10 = parseInt('8F',16);
quelle
Überprüfen Sie den vollständigen JS-Code , um ihn in eine andere Basis zu konvertieren
/**
* Konvertieren von / nach Binär / Dezimal / Hexadezimal in JavaScript * https://gist.github.com/shamshul2007/ * Copyright 2012-2015, Shamshul * Lizenziert unter der MIT-Lizenz * http://www.opensource.org/licenses / mit-Lizenz * /
(Funktion(){
var ConvertBase = function (num) { return { from : function (baseFrom) { return { to : function (baseTo) { return parseInt(num, baseFrom).toString(baseTo); } }; } }; }; // binary to decimal ConvertBase.bin2dec = function (num) { return ConvertBase(num).from(2).to(10); }; // binary to hexadecimal ConvertBase.bin2hex = function (num) { return ConvertBase(num).from(2).to(16); }; // decimal to binary ConvertBase.dec2bin = function (num) { return ConvertBase(num).from(10).to(2); }; // decimal to hexadecimal ConvertBase.dec2hex = function (num) { return ConvertBase(num).from(10).to(16); }; // hexadecimal to binary ConvertBase.hex2bin = function (num) { return ConvertBase(num).from(16).to(2); }; // hexadecimal to decimal ConvertBase.hex2dec = function (num) { return ConvertBase(num).from(16).to(10); }; //Octal to Decimal ConvertBase.oct2dec = function (num) { return ConvertBase(num).from(8).to(10); }; //Decimal to Octal ConvertBase.dec2oct = function (num) { return ConvertBase(num).from(10).to(8); }; this.ConvertBase = ConvertBase;
})(Dies);
/ * * Verwendungsbeispiel: * ConvertBase.bin2dec ('1111'); // '15' * ConvertBase.dec2hex ('82 '); // '52' * ConvertBase.hex2bin ('e2'); // '11100010' * ConvertBase.dec2bin ('153'); // '10011001' * ConvertBase.hex2dec ('1FE4ED63D55FA51E'); // '2298222722903156000' * ConvertBase.oct2dec ('777'); // '511' * ConvertBase.dec2oct ('551'); // '1047' * /
quelle
Sie können die in JavaScript integrierten Integer-Literale für einige Szenarien verwenden:
function binaryToDecimal(binaryString) { return Number('0b' + binaryString.replace('-', '')) * signOf(binaryString);; } function octalToDecimal(octalString) { return Number('0o' + octalString.replace('-', '')) * signOf(octalString); } function hexToDecimal(hexString) { return Number('0x' + hexString.replace('-', '')) * signOf(hexString); } function signOf(n) { return n.trim()[0] == '-' ? -1 : 1; } console.log(binaryToDecimal('-0101'), octalToDecimal('-052171'), hexToDecimal('deadbeef'));
quelle
Versuchen Sie den folgenden Code, der aus Slavik Meltsers Beitrag optimiert wurde und BASE n- Konvertierungen mit allen Radix-Kombinationen zwischen Base2 und Base256 implementiert . Dieser Code akzeptiert drei Arten von Argumenten zum Definieren von Quell- und Zielnummernsystemen:
Sie werden sehen, dass einige Ziffern des Zahlensystems innerhalb der Klasse fest codiert wurden und standardmäßig verwendet werden, wenn Sie den Radix als Argument übergeben. (.eg 64) Wenn keine fest codierte Ziffer vorhanden ist (z. B. 16), werden Standardnummern für alle Radixe zwischen Base2 und Base256 zugewiesen, was im Selbsttest weiter unten sehr deutlich wird.
function BASE() { /** * BASE n converter doing all the radix combinations between Base2 and Base256 * @param {String} str input number * @param {Number|String|Array} fromBase input number system radix (Number, e.g. 64), convention name (String, e.g. 'Bitcoin') or range (Array) * @param {Number|String|Array} toBASE output number system radix (Number), convention name (String) or range (Array e.g. ['0123456789']) * @return {String} output number */ this.convert = function (str, fromBase, toBASE) { if(typeof(fromBase)=='object') { this.fromSymbols = fromBase[0] } else this.fromSymbols = this.getsymbols(fromBase); if(typeof(toBASE) =='object') { this.toSymbols = toBASE[0] } else this.toSymbols = this.getsymbols(toBASE); fromBase = this.fromSymbols.length; toBASE = this.toSymbols.length; // PARSE INPUT DIGITS ARRAY for(var _a = [0], str = str.split(''); str.length > 0 && _a[_a.push(this.fromSymbols.indexOf(str.pop())) - 1] >= 0;); var _d = _a.shift() + _a[_a.length-1]>=0 ? _a : null; if (_d === null) return null; // BASE CONVERSION for (var _n = 0,_a = [],_p = [1]; _n < _d.length; _n++) { _a = add(_a, mul(_d[_n], _p, toBASE), toBASE); _p = mul(fromBase, _p, toBASE) } // PARSE OUTPUT DIGITS ARRAY for (var _n = _a.length - 1, _o = ''; _n >= 0; _o += this.toSymbols[_a[_n--]]); return _o.length==0?this.toSymbols[0]:_o; } this.symbols = { 32:function(){return this["base32hex"]}, 36:["[0-9][A-Z]"], 45:function(){return this["qr-alnum"]}, 58:function(){return this["Bitcoin"]}, 64:["[A-Z][a-z][0-9]+/"], 85:function(){return this["RFC 1924"]}, 91:["[A-Z][a-z][0-9]!#$%&()*+,./:;<=>?@[]^_`{|}~\""], 94:["[!-~]"], "geohash": ["[0-9][b-h]jkmn[p-z]"], // base 32 "RFC 4648": ["[A-Z][2-7]"], // base 32 "base32hex": ["[0-9][A-V]"], // base 32 "qr-alnum":["[0-9][A-Z] $%*+-./:"], // base 45 "Bitcoin": ["[1-9][A-H]JKLMN[P-Z][a-k][m-z]"], // base 58 "RFC 1924": ["[0-9][A-Z][a-z]!#$%&()*+-;<=>?@^_`{|}~"] // base 85 } this.getsymbols = function(index) { if(typeof(this.symbols[index])=="undefined") this.symbols[index] = index<95?this.rng(index<64?"[0-9][A-Z][a-z]+":"[A-Z][a-z][0-9][!-/][:-@][[-`][{-~]").substring(0,index):this.rng("[\x00-\xff]").substring(256-index,256); if(typeof(this.symbols[index])=="function") this.symbols[index] = this.symbols[index](); // process references if(typeof(this.symbols[index])=="object") this.symbols[index] = this.rng(this.symbols[index][0]); // process range_replace return this.symbols[index]; } this.rng = function(_s) { var _a = _s.match(/\[.-.\]/); if(_a==null) return _s; else { _a=[_a[0].charCodeAt(1),_a[0].charCodeAt(3)]; return this.rng(_s.replace(RegExp("\\[(\\x"+("0"+_a[0].toString(16)).slice(-2)+"-\\x"+_a[1].toString(16)+")\\]","g") ,String.fromCharCode(..." ".repeat(_a[1]-_a[0]+1).split("").map((_e,_i)=>_i+_a[0])) )) } } this.selftest = function() { var _a={}; for(var _o in this.symbols) _a[_o] = this.getsymbols(_o).length; // built-in symbols for(_o=2;_o<=95;_o++) _a[_o] = this.getsymbols(_o).length; _a[256]=256; // symbol range 2-95 + 256 (96-255 is similar) var _s = "",_a = Object.keys(_a).sort(function(a,b){return _a[a]-_a[b]}); // sort merged list for(var _i in _a) { // iterate number systems _o = {fromBase:10, toBASE:_a[_i]}; var _r = this.convert("",10,_o.toBASE) _s += "\r\n\oBASE.convert(n, '"+_o.fromBase+"', '"+_o.toBASE+"') ["+this.fromSymbols+"] ["+this.toSymbols+"]\r\n" for(var _n=0;_n<(this.fromSymbols.length+2);_n++) { // iterate numbers _r = this.convert(String(_n),_o.fromBase,_o.toBASE) _s += _n+(String(_n)==this.convert(_r,_o.toBASE,_o.fromBase)?">":"?")+"["+_r+"] "; } } return _s } var add = function(x, y, base) { var _m = Math.max(x.length, y.length); for(var _c = _n = 0,_r = []; _n < _m || _c; _c = Math.floor(_z / base)) { var _z = _c + (_n < x.length ? x[_n] : 0) + (_n < y.length ? y[_n] : 0); var _n = _r.push(_z % base); } return _r; } var mul = function(x, pow, base) { for(var _r = x < 0 ? null : []; x > 0; x = x >> 1) { if(x & 1) _r = add(_r, pow, base); pow = add(pow, pow, base); } return _r; } }
Verwendung:
// quick test, convert from base45 to base32, using custom symbols for base85 and back to base45 var oBASE = new BASE(); var n = "THIS IS A NUMBER"; // Base 45 code = 'qr-alnum' console.log(n); // Result: 'THIS IS A NUMBER' var n = oBASE.convert(n,"qr-alnum",32); // Base 45 to Base 32 = 'base32hex' console.log(n); // Result: '4ONI84LCTLJ1U08G1N' var s85 = oBASE.rng("[0-9][a-z][A-Z].-:+=^!/*?&<>()[]{}@%$#"); // 32/Z85 custom symbols var n = oBASE.convert(n,"base32hex",[s85]); // 'base2hex' to custom Base 85 console.log(n); // Result: 'fnaxrZP)?5d[DG' var n = oBASE.convert(n,[s85],45); // Custom Base 85 to Base 45 = 'qr-alnum' console.log(n); // Result: 'THIS IS A NUMBER' function BASE(){this.convert=function(o,r,n){this.fromSymbols="object"==typeof r?r[0]:this.getsymbols(r),this.toSymbols="object"==typeof n?n[0]:this.getsymbols(n),r=this.fromSymbols.length,n=this.toSymbols.length;var i=[0];for(o=o.split("");o.length>0&&i[i.push(this.fromSymbols.indexOf(o.pop()))-1]>=0;);var h=i.shift()+i[i.length-1]>=0?i:null;if(null===h)return null;for(var e=0,l=(i=[],[1]);e<h.length;e++)i=t(i,s(h[e],l,n),n),l=s(r,l,n);e=i.length-1;for(var m="";e>=0;m+=this.toSymbols[i[e--]]);return 0==m.length?this.toSymbols[0]:m},this.symbols={32:function(){return this.base32hex},36:["[0-9][A-Z]"],45:function(){return this["qr-alnum"]},58:function(){return this.Bitcoin},64:["[A-Z][a-z][0-9]+/"],85:function(){return this["RFC 1924"]},91:['[A-Z][a-z][0-9]!#$%&()*+,./:;<=>?@[]^_`{|}~"'],94:["[!-~]"],geohash:["[0-9][b-h]jkmn[p-z]"],"RFC 4648":["[A-Z][2-7]"],base32hex:["[0-9][A-V]"],"qr-alnum":["[0-9][A-Z] $%*+-./:"],Bitcoin:["[1-9][A-H]JKLMN[P-Z][a-k][m-z]"],"RFC 1924":["[0-9][A-Z][a-z]!#$%&()*+-;<=>?@^_`{|}~"]},this.getsymbols=function(t){return void 0===this.symbols[t]&&(this.symbols[t]=t<95?this.rng(t<64?"[0-9][A-Z][a-z]+":"[A-Z][a-z][0-9][!-/][:-@][[-`][{-~]").substring(0,t):this.rng("[\0-ÿ]").substring(256-t,256)),"function"==typeof this.symbols[t]&&(this.symbols[t]=this.symbols[t]()),"object"==typeof this.symbols[t]&&(this.symbols[t]=this.rng(this.symbols[t][0])),this.symbols[t]},this.rng=function(t){var s=t.match(/\[.-.\]/);return null==s?t:(s=[s[0].charCodeAt(1),s[0].charCodeAt(3)],this.rng(t.replace(RegExp("\\[(\\x"+("0"+s[0].toString(16)).slice(-2)+"-\\x"+s[1].toString(16)+")\\]","g"),String.fromCharCode(..." ".repeat(s[1]-s[0]+1).split("").map((t,o)=>o+s[0])))))},this.selftest=function(){var t={};for(var s in this.symbols)t[s]=this.getsymbols(s).length;for(s=2;s<=95;s++)t[s]=this.getsymbols(s).length;t[256]=256;var o="";t=Object.keys(t).sort(function(s,o){return t[s]-t[o]});for(var r in t){s={fromBase:10,toBASE:t[r]};var n=this.convert("",10,s.toBASE);o+="\r\noBASE.convert(n, '"+s.fromBase+"', '"+s.toBASE+"') ["+this.fromSymbols+"] ["+this.toSymbols+"]\r\n";for(var i=0;i<this.fromSymbols.length+2;i++)n=this.convert(String(i),s.fromBase,s.toBASE),o+=i+(String(i)==this.convert(n,s.toBASE,s.fromBase)?">":"?")+"["+n+"] "}return o};var t=function(t,s,o){for(var r=Math.max(t.length,s.length),n=e=0,i=[];e<r||n;n=Math.floor(h/o))var h=n+(e<t.length?t[e]:0)+(e<s.length?s[e]:0),e=i.push(h%o);return i},s=function(s,o,r){for(var n=s<0?null:[];s>0;s>>=1)1&s&&(n=t(n,o,r)),o=t(o,o,r);return n}}
Selbsttest:
// quick test, convert from base45 to base32, using custom symbols for base85 and back to base45 var oBASE = new BASE(); console.log(oBASE.selftest()) function BASE(){this.convert=function(o,r,n){this.fromSymbols="object"==typeof r?r[0]:this.getsymbols(r),this.toSymbols="object"==typeof n?n[0]:this.getsymbols(n),r=this.fromSymbols.length,n=this.toSymbols.length;var i=[0];for(o=o.split("");o.length>0&&i[i.push(this.fromSymbols.indexOf(o.pop()))-1]>=0;);var h=i.shift()+i[i.length-1]>=0?i:null;if(null===h)return null;for(var e=0,l=(i=[],[1]);e<h.length;e++)i=t(i,s(h[e],l,n),n),l=s(r,l,n);e=i.length-1;for(var m="";e>=0;m+=this.toSymbols[i[e--]]);return 0==m.length?this.toSymbols[0]:m},this.symbols={32:function(){return this.base32hex},36:["[0-9][A-Z]"],45:function(){return this["qr-alnum"]},58:function(){return this.Bitcoin},64:["[A-Z][a-z][0-9]+/"],85:function(){return this["RFC 1924"]},91:['[A-Z][a-z][0-9]!#$%&()*+,./:;<=>?@[]^_`{|}~"'],94:["[!-~]"],geohash:["[0-9][b-h]jkmn[p-z]"],"RFC 4648":["[A-Z][2-7]"],base32hex:["[0-9][A-V]"],"qr-alnum":["[0-9][A-Z] $%*+-./:"],Bitcoin:["[1-9][A-H]JKLMN[P-Z][a-k][m-z]"],"RFC 1924":["[0-9][A-Z][a-z]!#$%&()*+-;<=>?@^_`{|}~"]},this.getsymbols=function(t){return void 0===this.symbols[t]&&(this.symbols[t]=t<95?this.rng(t<64?"[0-9][A-Z][a-z]+":"[A-Z][a-z][0-9][!-/][:-@][[-`][{-~]").substring(0,t):this.rng("[\0-ÿ]").substring(256-t,256)),"function"==typeof this.symbols[t]&&(this.symbols[t]=this.symbols[t]()),"object"==typeof this.symbols[t]&&(this.symbols[t]=this.rng(this.symbols[t][0])),this.symbols[t]},this.rng=function(t){var s=t.match(/\[.-.\]/);return null==s?t:(s=[s[0].charCodeAt(1),s[0].charCodeAt(3)],this.rng(t.replace(RegExp("\\[(\\x"+("0"+s[0].toString(16)).slice(-2)+"-\\x"+s[1].toString(16)+")\\]","g"),String.fromCharCode(..." ".repeat(s[1]-s[0]+1).split("").map((t,o)=>o+s[0])))))},this.selftest=function(){var t={};for(var s in this.symbols)t[s]=this.getsymbols(s).length;for(s=2;s<=95;s++)t[s]=this.getsymbols(s).length;t[256]=256;var o="";t=Object.keys(t).sort(function(s,o){return t[s]-t[o]});for(var r in t){s={fromBase:10,toBASE:t[r]};var n=this.convert("",10,s.toBASE);o+="\r\noBASE.convert(n, '"+s.fromBase+"', '"+s.toBASE+"') ["+this.fromSymbols+"] ["+this.toSymbols+"]\r\n";for(var i=0;i<this.fromSymbols.length+2;i++)n=this.convert(String(i),s.fromBase,s.toBASE),o+=i+(String(i)==this.convert(n,s.toBASE,s.fromBase)?">":"?")+"["+n+"] "}return o};var t=function(t,s,o){for(var r=Math.max(t.length,s.length),n=e=0,i=[];e<r||n;n=Math.floor(h/o))var h=n+(e<t.length?t[e]:0)+(e<s.length?s[e]:0),e=i.push(h%o);return i},s=function(s,o,r){for(var n=s<0?null:[];s>0;s>>=1)1&s&&(n=t(n,o,r)),o=t(o,o,r);return n}}
quelle
Sie können Zahlen auch hexadezimal in dezimal wie folgt konvertieren:
var a="8F"; var b=a.split(""); var result=0;var hex_multiplier=1; for(var i=0;i<b.length;i++){ result +=parseInt(b[i],16)*hex_multiplier; hex_multiplier *=16; } console.log(result);
Hier können Sie a mit einer beliebigen Hexadezimalzahl ändern und das Ergebnis in Dezimalform erhalten.
quelle
Konvertieren von Zahlen in verschiedene Basen in JavaScript oder Typoskript auf folgende Weise.
function binary(number) { console.log((number >>> 0).toString(2)); //base 2 for binary } binary(-7); function octal(number) { console.log(number.toString(8)); //base 8 for octal } octal(15); function hex(number) { console.log(number.toString(16)); //base 16 for hex } hex(15);
Hier in der Binärfunktion können Sie die
number.toString(2)
Funktion verwenden, aber das Problem tritt auf, wenn negative Zahlen dargestellt werden. Damit können Sieunsigned right shift bitwise operator (>>>)
dieses Problem mit dem beheben.quelle
Ihre eigene Rekursionsmethode zum Erstellen von base2-Konvertierungen.
Wie von den oben genannten Benutzern erwähnt,
let n = 13; console.log(n.toString(2));
wird 13 von Basis 10 zu Basis 2 konvertiert.Aber für den Fall, dass Sie das gleiche programmieren möchten. Ich habe eine rekursive Methode geschrieben, um dasselbe zu tun. die einfach durch 2 teilen und dann die restlichen zählen.
// @author Tarandeep Singh :: Created recursive converter from base 10 to base 2 // @date : 2017-04-11 // Convert Base 10 to Base 2, We should reverse the output // For Example base10to2(10) = "0101" just do res = base10to2(10).split('').reverse().join(); function base10to2(val, res = '') { if (val >= 2) { res += '' + val % 2; return base10to2(val = Math.floor(val / 2), res); } else { res += '' + 1 return res; } } let n = 13; var result = base10to2(n).split('').reverse().join(); document.write(`Converting ${n} into Base2 is ${result}`);
quelle