Revision: 7528
Updated Code
at December 8, 2009 12:19 by wizard04
Updated Code
//Convert a number to a different base (e.g., from hex to decimal)
function changeBase(num, from, to)
{
if(isNaN(from) || from < 2 || from > 36 || isNaN(to) || to < 2 || to > 36)
throw (new RangeError("Illegal radix. Radices must be integers between 2 and 36, inclusive."));
num = parseInt(num, from); //convert to decimal
num = num.toString(to); //convert the decimal to desired base
return num.toUpperCase();
}
Revision: 7527
Updated Code
at August 6, 2008 14:48 by wizard04
Updated Code
//Convert a number to a different base
function changeBase(num, toBase, fromBase)
{
fromBase = fromBase || 10;
if(isNaN(toBase) || isNaN(fromBase)) return "";
if(toBase < 2 || toBase > 36 || fromBase < 2 || fromBase > 36) return ""; //out of accepted range
num = (""+num).toUpperCase(); //make sure it's a string
if(!(/^[0-9A-Z]+$/i).test(num)) return ""; //invalid characters
function toDec(c){ return !isNaN(c) ? 1*c : c.charCodeAt(0)-55; };
var fromDec = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//first convert to a decimal
var d, dec = 0;
while(num!="")
{
d = toDec(num[0]);
if(d >= fromBase) return ""; //invalid character
dec = dec*fromBase + d;
num = num.slice(1);
}
//then convert to base toBase
while(dec > 0)
{
num = fromDec[dec%toBase] + num;
dec = Math.floor(dec/toBase);
}
return num;
}
Revision: 7526
Updated Code
at August 6, 2008 14:47 by wizard04
Updated Code
//Convert a number to a different base
function changeBase(num, toBase, fromBase)
{
fromBase = fromBase || 10;
if(isNaN(toBase) || isNaN(fromBase)) return "";
if(toBase < 2 || toBase > 36 || fromBase < 2 || fromBase > 36) return ""; //out of accepted range
num = (""+num).toUpperCase(); //make sure it's a string
if(!(/^[0-9A-Z]+$/i).test(num)) return ""; //invalid characters
function toDec(c){ return !isNaN(c) ? 1*c : c.charCodeAt(0)-55; };
var fromDec = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//first convert to a decimal
var dec = 0;
while(num!="")
{
d = toDec(num[0]);
if(d >= fromBase) return ""; //invalid character
dec = dec*fromBase + d;
num = num.slice(1);
}
//then convert to base toBase
while(dec > 0)
{
num = fromDec[dec%toBase] + num;
dec = Math.floor(dec/toBase);
}
return num;
}
Revision: 7525
Updated Code
at August 6, 2008 14:45 by wizard04
Updated Code
//Convert a number to a different base
function changeBase(num, toBase, fromBase)
{
fromBase = fromBase || 10;
if(isNaN(toBase) || isNaN(fromBase)) return "";
if(toBase < 2 || toBase > 36 || fromBase < 2 || fromBase > 36) return ""; //out of accepted range
num = (""+num).toUpperCase(); //make sure it's a string
if(!(/^[0-9A-Z]+$/i).test(num)) return ""; //invalid characters
function toDec(c){ return !isNaN(c) ? 1*c : c.charCodeAt(0)-55; };
var fromDec = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//first convert to a decimal
var dec = 0;
while(num!="")
{
d = toDec(num.charAt(0));
if(d >= fromBase) return ""; //invalid character
dec = dec*fromBase + d;
num = num.slice(1);
}
//then convert to base toBase
while(dec > 0)
{
num = fromDec[dec%toBase] + num;
dec = Math.floor(dec/toBase);
}
return num;
}
Revision: 7524
Updated Code
at August 6, 2008 14:40 by wizard04
Updated Code
//Convert a number to a different base
function changeBase(num, toBase, fromBase)
{
fromBase = fromBase || 10;
if(isNaN(toBase) || isNaN(fromBase)) return "";
if(toBase < 2 || toBase > 36 || fromBase < 2 || fromBase > 36) return ""; //out of accepted range
num = (""+num).toUpperCase(); //make sure it's a string
if(!(/^[0-9A-Z]+$/i).test(num)) return ""; //invalid characters
function toDec(c)
{
if(!isNaN(c)) return 1*c;
return c.charCodeAt(0)-55;
}
var fromDec = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//first convert to a decimal
var dec = 0;
while(num!="")
{
d = toDec(num.charAt(0));
if(d >= fromBase) return ""; //invalid character
dec = dec*fromBase + d;
num = num.slice(1);
}
//then convert to base toBase
while(dec > 0)
{
num = fromDec[dec%toBase] + num;
dec = Math.floor(dec/toBase);
}
return num;
}
Revision: 7523
Updated Code
at July 29, 2008 09:59 by wizard04
Updated Code
function changeBase(num, toBase, fromBase)
{
if(isNaN(num) || !toBase || (fromBase && isNaN(fromBase))) return "";
num = ""+num.toUpperCase(); //make sure it's a string
if(!fromBase) fromBase = 10;
var digit = "";
//first, convert num to decimal
if(fromBase == 10)
{
dec = 1*num;
if(isNaN(dec)) return ""; //invalid characters
num = "";
}
else
{
if(!(/^[0-9A-Z]+$/i).test(num)) return ""; //invalid characters
var dec = 0;
do
{
digit = num.charAt(0);
if(!isNaN(digit)) dec = dec*fromBase + 1*digit;
else if(digit.charCodeAt(0)-55 >= fromBase) return ""; //invalid character
else dec = dec*fromBase + digit.charCodeAt(0)-55;
num = num.slice(1);
}while(num != "")
}
//then convert to base toBase
if(toBase > 36) return ""; //base is too big; not enough letters in the alphabet
digit = "";
do
{
digit = dec % toBase;
if(digit <= 9) num = digit.toString() + num;
else num = String.fromCharCode(digit+55) + num;
dec = (dec - dec%toBase) / toBase;
}while(dec > 0)
return num;
}
Revision: 7522
Updated Code
at July 28, 2008 12:31 by wizard04
Updated Code
function changeBase(num, toBase, fromBase)
{
if(isNaN(num) || !toBase) return "";
num = ""+num; //make sure it's a string
if(!fromBase) fromBase = 10;
var digit = "";
//first, convert num to decimal
if(fromBase == 10)
{
dec = 1*num;
if(isNaN(dec)) return ""; //invalid characters
num = "";
}
else
{
if(!(/^[0-9A-Z]+$/i).test(num)) return ""; //invalid characters
var dec = 0;
do
{
digit = num.charAt(0);
if(!isNaN(digit)) dec = dec*fromBase + 1*digit;
else if(digit.charCodeAt(0)-55 >= fromBase) return ""; //invalid character
else dec = dec*fromBase + digit.charCodeAt(0)-55;
num = num.slice(1);
}while(num != "")
}
//then convert to base toBase
if(toBase > 36) return ""; //base is too big; not enough letters in the alphabet
digit = "";
do
{
digit = dec % toBase;
if(digit <= 9) num = digit.toString() + num;
else num = String.fromCharCode(digit+55) + num;
dec = (dec - dec%toBase) / toBase;
}while(dec > 0)
return num;
}
Revision: 7521
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at July 28, 2008 12:10 by wizard04
Initial Code
Number.prototype.toBase = function(base)
{
if(base > 36) return ""; //base is too big; not enough letters in the alphabet
var n = this.valueOf();
var result = "";
var digit = "";
do
{
digit = n % base;
if(digit <= 9) result = digit.toString() + result;
else result = String.fromCharCode(digit+55) + result;
n = (n - n%base) / base;
}while(n > 0)
return result;
};
String.prototype.numberFromBase = function(base)
{
if(!(/^[0-9A-Z]+$/i).test(this)) return NaN; //invalid characters
var s = this.valueOf();
var result = 0;
var digit = "";
do
{
digit = s.charAt(0);
if(!isNaN(digit)) result = result*base + 1*digit;
else if(digit.charCodeAt(0)-55 >= base) return NaN; //invalid character
else result = result*base + digit.charCodeAt(0)-55;
s = s.slice(1);
}while(s != "")
return result;
}
Initial URL
Initial Description
Convert a number to a different base.
Initial Title
Number Base Conversion
Initial Tags
javascript, number
Initial Language
JavaScript