
本文详细介绍了在go语言中如何将无符号整数(`uint`或`uint64`)转换为其二进制表示的切片(`[]byte`),其中每个元素为0或1。核心方法是利用`strconv.formatuint`函数将整数转换为二进制字符串,随后遍历该字符串并进行ascii码转换,从而高效地生成所需的二进制位切片。
在Go语言的日常开发中,我们有时需要将一个无符号整数(如uint或uint64)转换为其二进制形式的切片,其中每个元素代表一个二进制位(0或1)。虽然Go标准库中没有直接提供此类内置函数,但我们可以巧妙地结合strconv包来实现这一功能。
实现将uint64转换为二进制位切片的核心思路分为两步:
下面是具体的函数实现:
package main
import (
"fmt"
"strconv"
)
// Bits 将一个 uint64 类型的无符号整数转换为其二进制表示的 []byte 切片。
// 切片中的每个元素为 0 或 1。
func Bits(i uint64) []byte {
// 初始化一个空的字节切片,用于存放二进制位
bits := []byte{}
// 使用 strconv.FormatUint 将整数 i 转换为其二进制字符串表示。
// 第二个参数 2 表示基数(二进制)。
binaryString := strconv.FormatUint(i, 2)
// 遍历二进制字符串的每一个字符
for _, b := range binaryString {
// 将字符 '0' 或 '1' 转换为对应的数字 0 或 1。
// 在 ASCII/Unicode 中,字符 '0' 的码点是 48,'1' 是 49。
// 减去 rune('0') (即 48) 可以得到对应的整数值。
bits = append(bits, byte(b - '0'))
}
return bits
}
func main() {
// 示例:转换数字 2
num1 := uint64(2)
binarySlice1 := Bits(num1)
fmt.Printf("数字 %d 的二进制表示为: %v\n", num1, binarySlice1) // 输出: 数字 2 的二进制表示为: [1 0]
// 示例:转换数字 10
num2 := uint64(10)
binarySlice2 := Bits(num2)
fmt.Printf("数字 %d 的二进制表示为: %v\n", num2, binarySlice2) // 输出: 数字 10 的二进制表示为: [1 0 1 0]
// 示例:转换数字 255
num3 := uint64(255)
binarySlice3 := Bits(num3)
fmt.Printf("数字 %d 的二进制表示为: %v\n", num3, binarySlice3) // 输出: 数字 255 的二进制表示为: [1 1 1 1 1 1 1 1]
// 示例:转换数字 0
num4 := uint64(0)
binarySlice4 := Bits(num4)
fmt.Printf("数字 %d 的二进制表示为: %v\n", num4, binarySlice4) // 输出: 数字 0 的二进制表示为: [0]
}
strconv.FormatUint(i, 2):
立即学习“go语言免费学习笔记(深入)”;
for _, b := range binaryString:
byte(b - '0'):
通过strconv.FormatUint与简单的字符码点转换,我们可以轻松地在Go语言中实现将无符号整数转换为其二进制位切片的功能。这种方法简洁、直观,并且在大多数情况下能够满足开发需求,为处理位级数据提供了便利。
以上就是Go语言中无符号整数的二进制表示与转换的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号