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 ...
最新文章
- vscode配置记录
- 汇编语言 实现一个数字的平方
- sqlplus 登录数据库
- BZOJ3236 [Ahoi2013]作业
- 卡巴斯基安全浏览器_卡巴斯基杀毒软件被曝出用户上网痕迹泄露漏洞
- tohexstring方法_Java Float类toHexString()方法的示例
- Spring-读取properties文件
- 阿里工程师教你 3 分钟实现数据源编排和接入
- 让人耗尽脑汁的需求分析工作(转--Fireball)
- 小 C 的数学(math)详解
- 【云大会】之五《第七届云计算大会 Day1感受:喧嚣退潮、人气萎缩》
- 【自学】张量、维度、多维矩阵、dim、torch.argmax()
- 基于深度学习和自闭症脑成像数据库(ABIDE)识别自闭症谱系障碍
- SSL与数字证书,Htpps
- axis.jar的应用
- python计算器基础知识_Python基础知识+计算器练习
- 机器学习之线性回归模型
- Android硬件通信之 蓝牙通信
- 女大学生被骗死亡,各国如何应对电话诈骗?
- VC中CTreeView控件的使用