当前位置:首页 > Go > 正文

Go语言进制转换完全指南(使用strconv包实现二进制、八进制、十进制与十六进制互转)

在编程中,经常需要在不同进制之间进行数值转换。比如处理网络协议、加密算法或底层系统开发时,常常会遇到二进制、八进制、十进制和十六进制之间的转换需求。Go语言标准库中的 strconv 包提供了强大而简洁的工具来完成这些任务。

本文将带你从零开始,深入浅出地掌握 Go语言 中使用 strconv 包进行进制转换的方法。无论你是刚入门的开发者,还是希望巩固基础知识的老手,这篇教程都能帮到你。

Go语言进制转换完全指南(使用strconv包实现二进制、八进制、十进制与十六进制互转) Go语言 strconv 进制转换 教程 第1张

一、strconv 包简介

strconv(string convert)是 Go 语言标准库中用于字符串与基本数据类型之间相互转换的包。它不仅支持整数、浮点数的解析与格式化,还特别支持不同进制的表示与转换。

二、十进制转其他进制(FormatInt / FormatUint)

要将一个十进制整数转换为二进制、八进制或十六进制字符串,可以使用 strconv.FormatInt(有符号整数)或 strconv.FormatUint(无符号整数)。

函数签名如下:

func FormatInt(i int64, base int) stringfunc FormatUint(i uint64, base int) string  

其中 base 参数指定目标进制,取值范围为 2 到 36。常用值包括:

  • 2:二进制
  • 8:八进制
  • 10:十进制
  • 16:十六进制

示例代码:

package mainimport (    "fmt"    "strconv")func main() {    num := int64(255)    bin := strconv.FormatInt(num, 2)   // 二进制    oct := strconv.FormatInt(num, 8)   // 八进制    dec := strconv.FormatInt(num, 10)  // 十进制    hex := strconv.FormatInt(num, 16)  // 十六进制    fmt.Println("二进制:", bin)   // 输出: 11111111    fmt.Println("八进制:", oct)   // 输出: 377    fmt.Println("十进制:", dec)   // 输出: 255    fmt.Println("十六进制:", hex) // 输出: ff}  

三、其他进制字符串转十进制(ParseInt / ParseUint)

反过来,如果你有一个表示二进制、八进制或十六进制的字符串,想把它转成十进制整数,可以使用 strconv.ParseIntstrconv.ParseUint

函数签名:

func ParseInt(s string, base int, bitSize int) (i int64, err error)func ParseUint(s string, base int, bitSize int) (i uint64, err error)  

参数说明:

  • s:待解析的字符串
  • base:字符串的原始进制(如 2、8、16),若设为 0,则自动根据前缀判断(如 0x 表示十六进制)
  • bitSize:结果整数的位数(0、8、16、32、64),用于溢出检查

示例代码:

package mainimport (    "fmt"    "strconv")func main() {    // 二进制字符串转十进制    binStr := "11111111"    num1, _ := strconv.ParseInt(binStr, 2, 64)    fmt.Println("二进制转十进制:", num1) // 255    // 十六进制字符串(带前缀)    hexStr := "0xFF"    num2, _ := strconv.ParseInt(hexStr, 0, 64) // base=0 自动识别 0x    fmt.Println("十六进制转十进制:", num2) // 255    // 八进制字符串    octStr := "377"    num3, _ := strconv.ParseInt(octStr, 8, 64)    fmt.Println("八进制转十进制:", num3) // 255}  

四、注意事项与常见错误

  • 使用 ParseInt 时,如果字符串包含非法字符(如二进制字符串中出现 '2'),会返回错误。
  • 十六进制字母不区分大小写("FF" 和 "ff" 都有效)。
  • base=0 时,Go 会根据以下前缀自动判断进制:
      • 0b0B → 二进制
      • 0 开头(非 0x)→ 八进制(注意:仅限于像 "0777" 这样的形式)
      • 0x0X → 十六进制
      • 否则默认为十进制

五、总结

通过 Go 语言的 strconv 包,我们可以轻松实现各种进制之间的转换。无论是将十进制数字格式化为二进制字符串,还是解析十六进制配置项,strconv 都提供了安全、高效且易用的接口。

掌握这些基础技能,不仅能提升你的 Go语言 编程能力,还能在实际项目中灵活应对各种数据表示需求。希望这篇关于 strconv 进制转换教程 对你有所帮助!

关键词:Go语言、strconv、进制转换、教程