对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. 《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集
  2. 参加软件测试培训需要学什么技术
  3. 推荐7款超良心的windows软件,每一个都是精品!
  4. FATCAT桌面计算器即将出炉!
  5. Python 各种运行错误(如:SyntaxError :invalid syntax)
  6. gitlab 删除分支_初识gitlab工作流
  7. 笔记本上的CNN搞定了MNIST
  8. SVG 与 HTML5 的 canvas 相比较:
  9. 3d激光雷达开发(法向量预测)
  10. ASP.Net下使用ExtJS报“Ext未定义”错误的原因
  11. bzoj 4556 字符串 —— 后缀数组+主席树
  12. no symbol version section for versioned symbol `memcpy@GLIBC_2.4'
  13. win7计算机屏保后声音丢失,告诉你win7屏保怎么设置
  14. imp执行错误IMP-00010
  15. Centos6连接网络配置
  16. ZOJ4043 : Virtual Singers
  17. 无线华为能连苹果不能连接到服务器,华为网络正常app连不上网络
  18. UDT长度的含义是什么?
  19. mySQL中stuff,SQL 中STUFF用法
  20. 新手上路--linux学习第一课

热门文章

  1. Photoshop.js对图层的基本操作
  2. 【集合类】 4 System:System.arraycopy方法解析
  3. 学习前端开发需要的电脑配置需求
  4. 前端程序员如何学好算法
  5. 【python算法系列三】 希尔排序算法
  6. 日本所得税和住民税的计算方法
  7. 开放式耳机排行榜,排名前五的开放式耳机分享
  8. 【Python刷题篇】——Python数据分析 01 查看数据(一)
  9. 【JAVA】数组的声明定义遍历
  10. Java开发快递物流项目(3)