Golang如何实现任意进制转换的方法示例
作者:LiXUEPING 发布时间:2024-02-23 07:43:48
标签:golang,进制转换
前言
最近因为工作的需要,需要写个短链服务,用到了10->62进制,网上找了一个,可以转换最多76位进制的博客,现在分享出来,下面话不多说了,来一起看看详细的介绍吧。
压缩数据用,无损压缩
示例代码:
package main
import (
"fmt"
"math"
"strconv"
"strings"
)
var tenToAny map[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"}
func main() {
fmt.Println(decimalToAny(9999, 76))
fmt.Println(anyToDecimal("1F[", 76))
}
// 10进制转任意进制
func decimalToAny(num, n int) string {
new_num_str := ""
var remainder int
var remainder_string string
for num != 0 {
remainder = num % n
if 76 > remainder && remainder > 9 {
remainder_string = tenToAny[remainder]
} else {
remainder_string = strconv.Itoa(remainder)
}
new_num_str = remainder_string + new_num_str
num = num / n
}
return new_num_str
}
// map根据value找key
func findkey(in string) int {
result := -1
for k, v := range tenToAny {
if in == v {
result = k
}
}
return result
}
// 任意进制转10进制
func anyToDecimal(num string, n int) int {
var new_num float64
new_num = 0.0
nNum := len(strings.Split(num, "")) - 1
for _, value := range strings.Split(num, "") {
tmp := float64(findkey(value))
if tmp != -1 {
new_num = new_num + tmp*math.Pow(float64(n), float64(nNum))
nNum = nNum - 1
} else {
break
}
}
return int(new_num)
}
来源:http://www.lflxp.cn/2016/04/09/2016-04-09-任意进制转换/


猜你喜欢
- decode()方法使用注册编码的编解码器的字符串进行解码。它默认为默认的字符串编码。语法以下是decode()方法的语法:st
- 最近的项目涉及到很多表单的制作,特别是复选框(checkbox)和单选框(radio)。但是在前端开发过程中发现,单(复)选框和它们后面的提
- 这是我自己实测过的方法,直接在命令行里输入pip install +(所需要的库),即可成功下载,可能它会自动检测电脑Python的版本而下
- 前言本文将深入研究 preg_replace /e 模式下的代码执行问题,其中包括 preg_replace 函数的执行过程分析、正则表达式
- 使用Vue来实现鼠标悬停效果。可以使用事件处理器v-on指令(简写为:@)来完成。为标签绑定mouseenter以及mouseleave事件
- mysql创建存储过程的官方语法为:START TRANSACTION | BEGIN [WORK]COMMIT [WORK] [AND [
- 前言如果想要容易理解核心的特征计算的话建议先去看看我之前的听歌识曲的文章,传送门:https://www.jb51.net/article/
- 对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串''相同的事。情况并非如此。例如,下述语句是
- 简单的设计思路利用pytest对一个接口进行各种场景测试并且断言验证配置文件独立开来(conf文件),实现不同环境下只需要改环境配置即可测试
- 在Google Chrome浏览器出来之前,我一直使用FireFox,因为FireFox的插件非常丰富,更因为FireFox有强大的Fire
- 本文实例讲述了Python实现压缩与解压gzip大文件的方法。分享给大家供大家参考,具体如下:#encoding=utf-8#author:
- 之前学习深度学习算法,都是使用网上现成的数据集,而且都有相应的代码。到了自己开始写论文做实验,用到自己的图像数据集的时候,才发现无从下手 ,
- 本文实例讲述了python判断给定的字符串是否是有效日期的方法。分享给大家供大家参考。具体分析如下:这里python判断给定的字符串是否是一
- 前言最近 GitHub 上有个基于 ChatGPT API 的浏览器脚本,openai-translator, 短时间内 star 冲到了
- 前言数据来源:population_data.json,先看一下数据长啥样[ { "Coun
- 说到运维报警,我觉得都可以写个长篇历史来详细解释了报警的前世来生,比如最早报警都是用邮件,但邮件实时性不高,比如下班回家总不能人一直盯着邮箱
- 本文实例讲述了python根据出生日期返回年龄的方法。分享给大家供大家参考。具体实现方法如下:def CalculateAge(self,
- 通常绘制二维曲线的时候可以使用matplotlib,不过如果电脑上安装了pandas的话可以直接使用Series的绘图方法进行图像的绘制。p
- 前言Python 这门语言最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。但有时候我们写代码,特别是 Python
- 背景介绍Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。因为这