Golang如何实现任意进制转换的方法示例
前言
最近因为工作的需要,需要写个短链服务,用到了10->62进制,网上找了一个,可以转换最多76位进制的博客,现在分享出来,下面话不多说了,来一起看看详细的介绍吧。
压缩数据用,无损压缩
示例代码:
packagemain import( "fmt" "math" "strconv" "strings" ) vartenToAnymap[int]string=map[int]string{0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"a",11:"b",12:"c",13:"d",14:"e",15:"f",16:"g",17:"h",18:"i",19:"j",20:"k",21:"l",22:"m",23:"n",24:"o",25:"p",26:"q",27:"r",28:"s",29:"t",30:"u",31:"v",32:"w",33:"x",34:"y",35:"z",36:":",37:";",38:"<",39:"=",40:">",41:"?",42:"@",43:"[",44:"]",45:"^",46:"_",47:"{",48:"|",49:"}",50:"A",51:"B",52:"C",53:"D",54:"E",55:"F",56:"G",57:"H",58:"I",59:"J",60:"K",61:"L",62:"M",63:"N",64:"O",65:"P",66:"Q",67:"R",68:"S",69:"T",70:"U",71:"V",72:"W",73:"X",74:"Y",75:"Z"} funcmain(){ fmt.Println(decimalToAny(9999,76)) fmt.Println(anyToDecimal("1F[",76)) } //10进制转任意进制 funcdecimalToAny(num,nint)string{ new_num_str:="" varremainderint varremainder_stringstring fornum!=0{ remainder=num%n if76>remainder&&remainder>9{ remainder_string=tenToAny[remainder] }else{ remainder_string=strconv.Itoa(remainder) } new_num_str=remainder_string+new_num_str num=num/n } returnnew_num_str } //map根据value找key funcfindkey(instring)int{ result:=-1 fork,v:=rangetenToAny{ ifin==v{ result=k } } returnresult } //任意进制转10进制 funcanyToDecimal(numstring,nint)int{ varnew_numfloat64 new_num=0.0 nNum:=len(strings.Split(num,""))-1 for_,value:=rangestrings.Split(num,""){ tmp:=float64(findkey(value)) iftmp!=-1{ new_num=new_num+tmp*math.Pow(float64(n),float64(nNum)) nNum=nNum-1 }else{ break } } returnint(new_num) }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。