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

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

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

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

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))。

总结建议

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

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