Invert GMLscripts.com

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
//
/// GMLscripts.com/license
{
    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