Golang10进制转16进制的几种方法
对Golang10进制转16进制的几种方法做了一些总结,一切尽在代码中:
func main() {// 以下为10进制转16进制的几种方式://1 手撸hex := toHex(di)//2 内置的string工具包hex1 := strconv.FormatInt(int64(di), 16)//3 format 提供的方法hex2 := fmt.Sprintf("%x", di)
}
如果仅是找工具的看客,看到这里就可以止步了,以下内容纯属自娱:
/**
循环右移4位(一个16进制数),取下标,拼接成字符串,
右移过程中,先取低位,因此拼接过程需要对结果做反转。
给出的两种实现区别仅在于反转的方式不同:
1.先循环一次,找到转换后16进制数的长度,拼接时从后往前。(长得有点难看)
2.直接用切片间的 append 反向拼接(每次构建新的切片,占用较多空间)
*/
// scheme 1:
func toHex0(di int) string {index := 0var o = difor o >= 16 {index++o >>= 4}ret := make([]byte, index+1)var i = 0digits := "0123456789abcdefx"for di >= 16 {ret[index-i] = digits[di&0xF]i++di >>= 4}ret[0] = digits[di&0xF]return string(ret)
}// scheme 2:
func toHex(di int) string {ret := make([]byte, 0)digits := "0123456789abcdefx"for di >= 16 {//从低位往高位取,直接使用切片append 单个元素,结果是倒序的temp := []byte{digits[di&0xF]}temp = append(temp, ret...)ret = tempdi >>= 4}// 最高位在循环外,单独取temp := []byte{digits[di&0xF]}return string(append(temp, ret...))
}
基于以上原理,可以写一个32进制下的通用转换:
func toBelow32(di int, base int) string {upperstr := "0123456789abcdefghijklmnopqrstuv"substr := upperstr[0:base]ret := make([]byte, 0)mol := base - 1mov := math.Log2(float64(base))for di >= base {temp := []byte{substr[di&mol]}temp = append(temp, ret...)ret = tempdi >>= int(mov)}temp := []byte{substr[di&mol]}return string(append(temp, ret...))
}
//eg:toBelow32(anynum,16)
注意:该方法基于循环右移实现,只适用10到2的n次幂(2,4,8,16,32)进制的转换。
补充:意外发现golang math 包下提供了log函数,方法1 可以更优雅的实现:
func toHex0(di int) string {index := int(math.Log2(float64(math.Log2(float64(di)))))ret := make([]byte, index+1)var i = 0digits := "0123456789abcdefx"for di >= 16 {ret[index-i] = digits[di&0xF]i++di >>= 4}ret[0] = digits[di&0xF]return string(ret)
}
Golang10进制转16进制的几种方法相关推荐
- python16进制转10进制_python 字节串及10进制,16进制相关转换
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: in ...
- C++中如何表示2进制,8进制、16进制变量
1.C和C++都没有提供二进制数的表达方法. 2.C,C++语言中,如何表达一个八进制数呢? 如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字.但如果这个数是 ...
- 16进制数组转成10进制 qt_QT 16进制 ASII 10进制 转换
//16进制字符串转字节数组 static QByteArray HexStrToByteArray(QString str) { QByteArray senddata; //发送数据 int h ...
- JAVA复习:8进制与16进制
一.八进制 每3位二进制作为一个单元,最小数是0,最大数是7,共8个数字,这就是八进制. 例如:97:01100001拆分: 01 100 001-> 1+4+1即 十进制为97的数值 ...
- linux shell 10进制转16进制
10进制转16进制:15 > 0xf printf '%x\n' 15 16进制转10进制:0xf > 15 printf '%d\n' 0xF echo $((16#f)) 16进制转8 ...
- Java10进制转16进制,16进制转10进制
1.Java10进制转16进制 /** 卡号位数:8 */public static byte CARD_NUM_BIT = 8;/*** isBlank * * @param value* @ret ...
- Javascript 10进制转16进制补0 ,16进制转10进制
Javascript 10进制转16进制补0 ,16进制转10进制 10进制转16进制补0 16进制转10进制 10进制转16进制补0 // 10进制转16进制补0 function dec2hex( ...
- C++10进制转16进制
10进制转16进制是常用的算法,一般利用循环做除法求余数的方法来求解.由于先求出来余数要最后输出,给这个问题增加了难度,在学习过程中发现一个利用字符串巧妙解决该问题的方法: #include<i ...
- Python中int、str、bytes相互转化,还有2进制、16进制表示,你想要的都在这里了
文章目录 前言 数据类型转化 int -> str 使用 str() 函数 使用 format() 函数 使用 hex() 转换成16进制形式 使用 bin() 转换成2进制形式 str -&g ...
最新文章
- 3 css 奖品出现弹出动画_【技术】nuxt中引入wow和animate.css 页面随滚动条出现动画...
- JAVA防盗链在报表中的应用实例
- 3行代码实现从excel中读取出某列元素为所想要的元素集合中的所有行
- Leetcode113路径总和2
- 【Python】相当全面的Pandas文本数据处理,干货多多
- 利用KD树进行异常检测
- 对于一个ul列表,单击弹出每个li对应的索引
- 数据结构与算法-索引1909
- Solr 通过fl可以设置需要返回的字段
- 网络编程之 字节序和深入理解bind()函数
- 如何学习多传感器感知融合技术?
- php无限极 left right,PHP超牛逼无限极分类生成树方法
- 在一台机器上使用gluster
- 测试驱动开发(TDD)的理论基础
- Python中 实现过采样和下采样
- boost::math::binomial_distribution用法的测试程序
- uni-app活动倒计时功能
- C语言/C++常见习题问答集锦(六十四) 之兔子繁殖(递归与非递归)
- som神经网络聚类简单例子_深度聚类的可视化解释
- citrixreceiver云桌面系统_基于Citrix的云桌面方案