Golang10进制转16进制的几种方法代码示例

2023-12-05 0 703

对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 := 0
var o = di
for o >= 16 {
index++
o >>= 4
}
ret := make([]byte, index+1)
var i = 0
digits := \”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 = temp
di >>= 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 – 1
mov := math.Log2(float64(base))
for di >= base {
temp := []byte{substr[di&mol]}
temp = append(temp, ret…)
ret = temp
di >>= 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 = 0
digits := \”0123456789abcdefx\”
for di >= 16 {
ret[index-i] = digits[di&0xF]
i++
di >>= 4
}
ret[0] = digits[di&0xF]
return string(ret)
}

附:Golang:十进制切片数组转换为16进制字符串

//十进制切片数组转换为16进制字符串
import (
\”fmt\”
\”strings\”
)
func Tool_DecimalByteSlice2HexString(DecimalSlice []byte) string {
var sa = make([]string, 0)
for _, v := range DecimalSlice {
sa = append(sa, fmt.Sprintf(\”%02X\”, v))
}
ss := strings.Join(sa, \”\”)
return ss
}

总结

到此这篇关于Golang10进制转16进制的几种方法的文章就介绍到这了,更多相关Golang10进制转16进制内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • golang 将[]byte转成16进制的实现
  • Golang中String,rune和byte的相互转换
  • golang中的string与其他格式数据的转换方法详解
  • 如何将Golang数组slice转为逗号分隔的string字符串
  • Golang中的[]byte与16进制(String)之间的转换方式

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Golang Golang10进制转16进制的几种方法代码示例 https://www.u-9.cn/jiaoben/golang/102193.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务