Created
January 16, 2019 04:49
-
-
Save jiggzson/b38c5ccd9549ed53b0e377e22bb2acdb to your computer and use it in GitHub Desktop.
Convert between different number bases. No radix of 36 restriction
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Convert a number to base 10 give a base and a number array | |
* @param {int[]} n_array | |
* @param {int} base | |
* @returns {int} | |
*/ | |
var to_base10 = function(n_array, base) { | |
n_array.reverse(); | |
var n = 0; | |
for(var i=0, l=n_array.length; i<l; i++) { | |
n += Math.pow(base, i)*n_array[i]; | |
} | |
return n; | |
}; | |
/** | |
* Convert a number from base 10 give a base number and a base | |
* @param {int} n | |
* @param {int} base | |
* @returns {int[]} | |
*/ | |
var from_base10 = function(n, base) { | |
var n_array = []; | |
//the number place | |
var num_place = 0; | |
//start | |
while(n > 0) { | |
//1. divide by the base | |
var rem = n%base; | |
//2. remove the remainder | |
n -= rem; | |
//add the remainder to the appropriate number place | |
n_array[num_place] = rem; | |
//move to the next number place | |
num_place++; | |
//divide out this number place | |
n /= base; | |
} | |
return n_array.reverse(); | |
}; | |
/** | |
* Converts a number array using a map | |
* @param {int[]} n_array | |
* @param {String} map | |
* @returns {String} | |
*/ | |
var to_map = function(n_array, map) { | |
var n = []; | |
for(var i=0, l=n_array.length; i<l; i++) { | |
n.push(map.charAt(n_array[i])); | |
} | |
return n.join(''); | |
}; | |
/** | |
* | |
* @param {String|Number} n | |
* @param {String} map | |
* @returns {int[]} | |
*/ | |
var from_map = function(n, map) { | |
n = String(n); | |
var n_array = []; | |
var map_array = map.split(''); | |
for(var i=0, l=n.length; i<l; i++) { | |
n_array[i] = map_array.indexOf(n.charAt(i)); | |
} | |
return n_array; | |
}; | |
//Usage | |
var base = 70; | |
var m = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*'; | |
var b = from_base10(110216557474, base); | |
console.log(b); | |
//[ 65, 40, 31, 4, 69, 44 ] | |
var f = to_map(b, m); | |
console.log(f); | |
//$eV4*i | |
var k = to_base10(b, base); | |
console.log(k); | |
//110216557474 | |
var q = from_map('8F', m); | |
console.log(q); | |
//[ 8, 15 ] | |
var r = to_base10(q, 16); | |
console.log(r); | |
//143 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment