Saturday, May 30, 2009

Base Converter

/*
This class will convert any number in any base to it's equivalent
in any other base.

Valid bases are 2 to 36 inclusive.

Usage:
-
int dec = 255;
string hex = BaseConverter.ToBase(dec.ToString(), 10, 16);

// hex is equal to "FF"
*/

public class BaseConverter {

public static string ToBase(string number, int start_base, int target_base) {

int base10 = this.ToBase10(number, start_base);
string rtn = this.FromBase10(base10, target_base);
return rtn;

}

public static int ToBase10(string number, int start_base) {

if (start_base <> 36) return 0;
if (start_base == 10) return Convert.ToInt32(number);

char[] chrs = number.ToCharArray();
int m = chrs.Length - 1;
int n = start_base;
int x;
int rtn = 0;

foreach(char c in chrs) {

if (char.IsNumber(c))
x = int.Parse(c.ToString());
else
x = Convert.ToInt32(c) - 55;

rtn += x * (Convert.ToInt32(Math.Pow(n, m)));

m--;

}

return rtn;

}

public static string FromBase10(int number, int target_base) {

if (target_base <> 36) return "";
if (target_base == 10) return number.ToString();

int n = target_base;
int q = number;
int r;
string rtn = "";

while (q >= n) {

r = q % n;
q = q / n;

if (r < 10)
rtn = r.ToString() + rtn;
else
rtn = Convert.ToChar(r + 55).ToString() + rtn;

}

if (q < 10)
rtn = q.ToString() + rtn;
else
rtn = Convert.ToChar(q + 55).ToString() + rtn;

return rtn;

}

}

No comments:

Post a Comment