由于coding gists即将关闭,所以把此代码片搬到博客
js的Number支持直接使用toString转换到最多36进制(0-9a-z),而此函数支持转换到由传入进制表定义的任何进制。
默认进制表为0-9a-zA-Z的62进制
/*
COPYRIGHT luojia@luojia.me
MIT LICENSE
*/
function conv(n,o,t,olist,tlist){//数,原进制,目标进制[,原数所用字符表,目标字符表]
var dlist='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
tnum=[],m,negative=((n+='').trim()[0]=='-'),decnum=0;
olist||(olist=dlist);
tlist||(tlist=dlist);
if(negative)n=n.slice(1);
for(var i=n.length;i--;)
decnum+=olist.indexOf(n[i])*Math.pow(o,n.length-i-1);
for(;decnum!=0;tnum.unshift(tlist[m])){
m=decnum%t;
decnum=Math.floor(decnum/t);
}
decnum&&tnum.unshift(tlist[decnum]);
if(tnum.length===0)tnum.unshift(tlist[0]);
return (negative?'-':'')+tnum.join('');
}
conv(1234,10,2) //"10011010010"
conv(15,10,16) //"f"
conv('ABC',16,10) //"9846"
conv(3245670,10,10,null,'零一二三四五六七八九') //"三二四五六七零"
conv('①②③',10,2,'〇①②③④⑤⑥⑦⑧⑨') //"1111011"