
使用 fmt.Sprintf("%06x", num) 可高效地将一个 int 类型数值格式化为小写、左补零、长度恰好为 6 位的十六进制字符串。
使用 `fmt.sprintf("%06x", num)` 可高效地将一个 int 类型数值格式化为小写、左补零、长度恰好为 6 位的十六进制字符串。
在 Go 语言中,将整数转为固定长度十六进制字符串是一个常见需求(例如生成颜色值、唯一标识符或协议字段)。最简洁、高效且符合 Go 惯用法的方式是直接使用 fmt.Sprintf 配合格式动词 %06x:
-
%x:将整数以小写十六进制形式输出(如12→"c"); -
06:表示最小宽度为 6,不足时左侧用0填充(即零填充对齐); - 整体
%06x确保结果恒为 6 字符长的十六进制字符串(如12→"00000c",255→"0000ff",16777215→"ffffff")。
✅ 示例代码:
package main
import "fmt"
func main() {
num := 12
hex := fmt.Sprintf("%06x", num)
fmt.Println(hex) // 输出: "00000c"
// 更多测试用例
fmt.Println(fmt.Sprintf("%06x", 0)) // "000000"
fmt.Println(fmt.Sprintf("%06x", 255)) // "0000ff"
fmt.Println(fmt.Sprintf("%06x", 16777215)) // "ffffff"
fmt.Println(fmt.Sprintf("%06x", 16777216)) // "1000000" ← 注意:超 6 位时自动扩展(见下方说明)
}⚠️ 注意事项:
-
%06x是最小宽度而非严格截断或强制截断:若数值对应十六进制超过 6 位(如16777216的十六进制为1000000,共 7 位),结果将自动扩展为 7 位("1000000"),不会被截断。如需严格限定 6 位(即只取低 24 位),应先做位掩码处理:hex := fmt.Sprintf("%06x", num&0xffffff) // 确保仅保留低 24 位 - 若需大写十六进制,使用
%06X(如255→"0000FF"); -
strconv.FormatInt(int64(num), 16)虽可行,但需额外调用strings.Repeat("0", 6-len(s)) + s实现填充,代码冗长且性能略低,不推荐用于此场景。
总结:fmt.Sprintf("%06x", num) 是语义清晰、性能优异、标准库原生支持的标准解法,应作为首选方案。

















