商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何在 Go 语言中将整数(int)转换为十六进制字符串

如何在 Go 语言中将整数(int)转换为十六进制字符串

  发布于2026-07-19 阅读(0)

扫一扫,手机访问

本文详细介绍 Go 中将 int 类型数值转为十六进制字符串的规范方法,重点使用 fmt.Sprintf 配合 %x/%X 动词,并说明大小写差异、前缀处理及常见注意事项。

日常开发中,把整数转成十六进制字符串是个很常见的需求——比如打印颜色值、调试日志、或者处理协议字段。Go 的标准库并没有直接在 strconv 里给一个“int 转 hex 字符串”的专用函数(strconv.FormatInt 需要先转成 int64,而且灵活性有限),但最顺手、最推荐的方式其实就是用 fmt.Sprintf。它原生支持十六进制格式化,一行代码搞定,类型安全,还不用担心转换细节。

基础用法:fmt.Sprintf + %x 或 %X

两个格式化动词的作用很直观:

  • %x:生成小写十六进制(比如 255 → "ff")
  • %X:生成大写十六进制(比如 255 → "FF")
package main

import "fmt"

func main() {
    i := 255
    hexLower := fmt.Sprintf("%x", i) // → "ff"
    hexUpper := fmt.Sprintf("%X", i) // → "FF"
    fmt.Printf("Hex conv of '%d' is '%s'\n", i, hexLower)
    fmt.Printf("HEX conv of '%d' is '%s'\n", i, hexUpper)
}

输出:

Hex conv of '255' is 'ff'
HEX conv of '255' is 'FF'

进阶技巧:添加 0x 前缀与补零对齐

如果希望输出符合常见的十六进制字面量格式(比如 0xff 或 0xFF),手动拼接一下就行:

withPrefix := "0x" + fmt.Sprintf("%x", i) // → "0xff"

固定宽度也很常见,比如需要 4 位、不足补零:

padded := fmt.Sprintf("%04x", i)        // → "00ff" (255 的 4 位小写 hex)
paddedUpper := fmt.Sprintf("%04X", i)   // → "00FF"

✅ 注意:%04x 中的 0 表示前导零填充,4 表示最小总宽度;如果数值本身超过 4 位(比如 65535),会自动扩展,不会截断。

替代方案:strconv.FormatInt

有些场景下需要显式控制进制逻辑,或者处理的是 int64 类型,那么可以用 strconv.FormatInt

import "strconv"

i := 255
hexStr := strconv.FormatInt(int64(i), 16) // → "ff"(始终小写)

⚠️ 不过要注意:这个方式不支持大写输出,也不支持 0x 前缀或补零,灵活性比 fmt 差一截。而且对 int 类型需要显式转 int64,对 uint 还要额外处理(比如 strconv.FormatUint(uint64(x), 16))。

总结建议

  • 日常开发首选 fmt.Sprintf("%x", n):语义清晰、支持大小写/补零/前缀组合、兼容所有整数类型(int, int32, uint64 等)。
  • ⚠️ 避免过度依赖 strconv 实现 hex 转换——它设计初衷是字符串↔数值双向解析,不是专门做格式化输出的。
  • ? 如果涉及安全敏感场景(比如哈希摘要、密钥表示),建议统一用 %X 保证大写一致性,必要时结合 strings.ToUpper()strings.ToLower() 做二次校验(虽然通常不需要)。

掌握了这几种模式,Go 里整数转十六进制字符串就再也不是什么头疼的事了。

本文转载于:https://www.php.cn/faq/2312809.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注