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

 更新时间:2023年07月10日 09:18:52   作者:风之涯角  
这篇文章主要给大家介绍了关于Golang10进制转16进制的几种方法,进制转换是Golang的一些基本操作,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下

对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进制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • GO语言利用K近邻算法实现小说鉴黄

    GO语言利用K近邻算法实现小说鉴黄

    本文给大家分享的是一段GO语言利用K近邻算法实现小说鉴黄的方法,本方法的鉴别的关键是关键是向量点的选择和阈值的判定,推荐给大家,有需要的小伙伴可以参考下。
    2015-03-03
  • Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结

    Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结

    这篇文章主要介绍了Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结,本文直接给出操作代码,同时对代码加上了详细注释,需要的朋友可以参考下
    2014-11-11
  • docker中部署golang项目的步骤详解

    docker中部署golang项目的步骤详解

    这篇文章主要给大家介绍了关于在docker中部署golang项目的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Golang开发Go依赖管理工具dep安装验证实现过程

    Golang开发Go依赖管理工具dep安装验证实现过程

    这篇文章主要为大家介绍了Golang开发Go依赖管理工具dep安装验证及初始化一系列实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Go语言中iota的具体使用

    Go语言中iota的具体使用

    Go语言中,iota是一个用于生成一系列相关常量值的常量生成器,常应用于枚举、位操作等场景,广泛用于定义HTTP状态码、权限控制等,本文就来介绍一下iota的具体使用,感兴趣的可以了解一下
    2024-11-11
  • 详解Golang中单元测试的使用

    详解Golang中单元测试的使用

    单元测试是检测你写的一个函数是否具备安全性的一次检测,这篇文章主要为大家详细介绍了Golang中单元测试的具体使用,希望对大家有所帮助
    2023-07-07
  • golang atomic原子操作示例详解

    golang atomic原子操作示例详解

    这篇文章主要为大家介绍了golang atomic原子操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Go+Gin实现安全多文件上传功能

    Go+Gin实现安全多文件上传功能

    这篇文章主要为大家详细介绍了Go如何利用Gin框架实现安全多文件上传功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • go语言基础教程之(包、变量和函数)

    go语言基础教程之(包、变量和函数)

    这篇文章主要介绍了go语言基础教程之(包、变量和函数)的相关资料,需要的朋友可以参考下
    2023-07-07
  • Go语言从单体服务到微服务设计方案详解

    Go语言从单体服务到微服务设计方案详解

    这篇文章主要为大家介绍了Go语言从单体服务到微服务设计方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论