对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. 3 css 奖品出现弹出动画_【技术】nuxt中引入wow和animate.css 页面随滚动条出现动画...
  2. JAVA防盗链在报表中的应用实例
  3. 3行代码实现从excel中读取出某列元素为所想要的元素集合中的所有行
  4. Leetcode113路径总和2
  5. 【Python】相当全面的Pandas文本数据处理,干货多多
  6. 利用KD树进行异常检测
  7. 对于一个ul列表,单击弹出每个li对应的索引
  8. 数据结构与算法-索引1909
  9. Solr 通过fl可以设置需要返回的字段
  10. 网络编程之 字节序和深入理解bind()函数
  11. 如何学习多传感器感知融合技术?
  12. php无限极 left right,PHP超牛逼无限极分类生成树方法
  13. 在一台机器上使用gluster
  14. 测试驱动开发(TDD)的理论基础
  15. Python中 实现过采样和下采样
  16. boost::math::binomial_distribution用法的测试程序
  17. uni-app活动倒计时功能
  18. C语言/C++常见习题问答集锦(六十四) 之兔子繁殖(递归与非递归)
  19. som神经网络聚类简单例子_深度聚类的可视化解释
  20. citrixreceiver云桌面系统_基于Citrix的云桌面方案

热门文章

  1. 89C52RC普中单片机
  2. 银联手机网页支付(WAP支付) PHP开发
  3. C语言--基础编程题(各公司面试笔试真题)
  4. 【UE4 塔防游戏系列】04-敌人沿着指定路线移动
  5. Azkaban 基本架构是什么?
  6. 前端实习生笔试_2017年百度前端实习生面试笔试经历
  7. 多智能体系统协同一致性问题(二)
  8. DM 数据迁移工具——DTS(MySQL数据迁移到DM8数据库 Windows环境)
  9. ONI无法启动: Uh oh! Unable to launch Neovim...
  10. 阿里大于短信服务以及与SpringBoot的整各