10进制与62进制互相转换
2016-10-26 20:54
417 查看
遇到将数字(Decimal)以62进制编码的问题,这里所谓62进制是指采用0~9A~Za~z等62个字符进行编码(按ASCII顺序由小到大)。
10进制——>62进制
62进制——>10进制
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!
Note:这里以`6位编码`为例实现(C#,其他语言类似,或许有更有效的方式),实际中可根据需要调整,不过注意其表述的数值大小范围(eg:6位编码最大值:56800235583(long))。
10进制——>62进制
/// <summary> /// 将数字转为62进制 /// </summary> /// <param name="num">待转换的数字</param> /// <returns>编码字符串</returns> public static string EncodeStr(long num) { int scale = 62; StringBuilder sb = new StringBuilder(); char[] charArray = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray(); long remainder = 0; do { remainder = num % scale; sb.Append(charArray[remainder]); num = num / scale; } while (num > scale - 1); sb.Append(charArray[num]); char[] chars = sb.ToString().ToCharArray(); Array.Reverse(chars); string result = new string(chars); // 6 bits are required, add leading zeros when the encoded string < 6 long return result.PadLeft(6, '0'); }
62进制——>10进制
/// <summary> /// 62进制字符串转为数字 /// </summary> /// <param name="str">编码字符串</param> /// <returns>解码后的数字</returns> public static long DecodeNum(string str) { int scale = 62; string charArray = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; // Trim the leading zeros first str = Regex.Replace(str, "^0*", ""); long num = 0; int index = 0; for(int i = 0; i < str.Length; i++) { index = charArray.IndexOf(str[i]); num += (long)(index * (Math.Pow(scale, str.Length - i - 1))); } return num; }
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!
相关文章推荐
- 10进制与62进制互相转换
- 新浪微博的id和mid互相转换(10进制和62进制转换)
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- java将16进制与10进制互相转换
- 10进制和36进制互相转换
- javascript 10进制和62进制的相互转换
- 10进制与16进制互相转换
- Python 10进制与任意进制之间相互转换(最大为62进制)
- javascript 10进制和62进制的相互转换
- 十进制(10)与64进制互相转换算法
- 使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
- 2进制、8进制、10进制、16进制...各种进制间的轻松转换(c#)
- 【汇编】16进制转换成10进制(三种方法)
- 超级(无限)大的 --- 整型10进制数据与16进制数据相互转换
- 不同进制的数字字符串互相转换
- 2进制、8进制、10进制、16进制...各种进制间的轻松转换 (C#)
- 数制转换,将10进制转换为8进制 C语言 栈的应用
- 将10进制转换成为目标进制表示
- mysql 10进制与35进制之间的转换 注意Power处理bigint的问题