对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进制的几种方法相关推荐

  1. python16进制转10进制_python 字节串及10进制,16进制相关转换

    进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 16进制转10进制: in ...

  2. C++中如何表示2进制,8进制、16进制变量

    1.C和C++都没有提供二进制数的表达方法. 2.C,C++语言中,如何表达一个八进制数呢? 如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字.但如果这个数是 ...

  3. 16进制数组转成10进制 qt_QT 16进制 ASII   10进制 转换

    //16进制字符串转字节数组 static QByteArray HexStrToByteArray(QString str) { QByteArray senddata;  //发送数据 int h ...

  4. JAVA复习:8进制与16进制

    一.八进制 每3位二进制作为一个单元,最小数是0,最大数是7,共8个数字,这就是八进制. 例如:97:01100001拆分:    01 100  001->  1+4+1即 十进制为97的数值 ...

  5. 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 ...

  6. Java10进制转16进制,16进制转10进制

    1.Java10进制转16进制 /** 卡号位数:8 */public static byte CARD_NUM_BIT = 8;/*** isBlank * * @param value* @ret ...

  7. 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( ...

  8. C++10进制转16进制

    10进制转16进制是常用的算法,一般利用循环做除法求余数的方法来求解.由于先求出来余数要最后输出,给这个问题增加了难度,在学习过程中发现一个利用字符串巧妙解决该问题的方法: #include<i ...

  9. Python中int、str、bytes相互转化,还有2进制、16进制表示,你想要的都在这里了

    文章目录 前言 数据类型转化 int -> str 使用 str() 函数 使用 format() 函数 使用 hex() 转换成16进制形式 使用 bin() 转换成2进制形式 str -&g ...

最新文章

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

热门文章

  1. php solr docker搭建,深入浅出Docker技术- 基于Docker Solr集群的搭建
  2. 【BUUCTF】web 之 [护网杯 2018]easy_tornado
  3. 用 Minecraft 学会逻辑门
  4. 打印机的设置窗口看不到已经安装的打印机列表的处理
  5. label qt 自动换行_qt qlabel 自动换行
  6. Jredis的使用范例
  7. 内核编译图文教程,usb键盘鼠标篇
  8. Redis 面霸篇:高频问题横扫核心知识点
  9. 二维码生成及下载(前端)
  10. bp神经网络原理 实现过程,BP神经网络的基本思想