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)
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。