由于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"
本文发布于 https://luojia.me
本站文章未经文下加注授权不得拷贝发布。