# 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 string of digits representing the given number converted form one base to another.
COPY/// base_convert(number,oldbase,newbase)
//
//  Returns a string of digits representing the
//  given number converted form one base to another.
//  Base36 is the largest base supported.
//
//      number      integer value to be converted, string
//      oldbase     base of the given number, integer
//      newbase     base of the returned value, integer
//
{
var number, oldbase, newbase, out;
number = string_upper(argument0);
oldbase = argument1;
newbase = argument2;
out = "";

var len, tab;
len = string_length(number);
tab = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

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

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

return out;
}


Contributors: xot

GitHub: View · Commits · Blame · Raw