发布于2026-07-19 阅读(0)
扫一扫,手机访问
本文详细介绍 Go 中将 int 类型数值转为十六进制字符串的规范方法,重点使用 fmt.Sprintf 配合 %x/%X 动词,并说明大小写差异、前缀处理及常见注意事项。
日常开发中,把整数转成十六进制字符串是个很常见的需求——比如打印颜色值、调试日志、或者处理协议字段。Go 的标准库并没有直接在 strconv 里给一个“int 转 hex 字符串”的专用函数(strconv.FormatInt 需要先转成 int64,而且灵活性有限),但最顺手、最推荐的方式其实就是用 fmt.Sprintf。它原生支持十六进制格式化,一行代码搞定,类型安全,还不用担心转换细节。
两个格式化动词的作用很直观:
%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'
如果希望输出符合常见的十六进制字面量格式(比如 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),会自动扩展,不会截断。
有些场景下需要显式控制进制逻辑,或者处理的是 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 等)。%X 保证大写一致性,必要时结合 strings.ToUpper() 或 strings.ToLower() 做二次校验(虽然通常不需要)。掌握了这几种模式,Go 里整数转十六进制字符串就再也不是什么头疼的事了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8