Skip to content

Instantly share code, notes, and snippets.

@jiggzson
Created January 16, 2019 04:49
Show Gist options
  • Save jiggzson/b38c5ccd9549ed53b0e377e22bb2acdb to your computer and use it in GitHub Desktop.
Save jiggzson/b38c5ccd9549ed53b0e377e22bb2acdb to your computer and use it in GitHub Desktop.
Convert between different number bases. No radix of 36 restriction
/**
* 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