# base_convert

This script is used to convert integer values between to arbitrary bases. The numbers are supplied and returned as strings and the bases are supplied as integers.

n = base_convert("789", 10, 8);  //  decimal to octal returns "1425"
n = base_convert("abc", 16, 10); //  hex to decimal returns "2748"
n = base_convert("123", 10, 2);  //  decimal to binary returns "1111011"

NOTE: Check related scripts for several faster conversions of specific bases.

base_convert(number, oldbase, newbase)
Returns a number converted from one base as another base.
COPY/// @func   base_convert(number, oldbase, newbase)
///
/// @desc   Returns a number converted from one base as another base.
///         Base36 is the largest base supported.
///
/// @param  {string}    number      integer value to be converted
/// @param  {real}      oldbase     base of the given number
/// @param  {real}      newbase     base of the returned number
///
/// @return {string}    number
///

function base_convert(number, oldbase, newbase) {
number = string_upper(number);

var dig = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var len = string_length(number);

var num;
for (var i = 0; i < len; i++) {
num[i] = string_pos(string_char_at(number, i + 1), dig) - 1;
}

var out = "";
while (len > 0) {
var divide, newlen;
divide = 0;
newlen = 0;
for (var i = 0; i < len; i++) {
divide = divide * oldbase + num[i];
if (divide >= newbase) {
num[newlen] = divide div newbase;
newlen++;
divide = divide mod newbase;
} else if (newlen > 0) {
num[newlen] = 0;
newlen++;
}
}
len = newlen;
out = string_char_at(dig, divide + 1) + out;
}

return out;
}


Contributors: xot

GitHub: View · Commits · Blame · Raw