uint
是否有将 a 转换为二进制整数切片的内置函数{0,1}
?
>> convert_to_binary(2)
[1, 0]
我不知道有这样的功能,但是您可以将strconv.FormatUint
其用于此目的。
示例(播放中):
func Bits(i uint64) []byte {
bits := []byte{}
for _, b := range strconv.FormatUint(i, 2) {
bits = append(bits, byte(b - rune('0')))
}
return bits
}
FormatUint
将给定的字符串表示形式返回uint
到基数,在本例中为 2,因此我们将其编码为二进制。所以返回的字符串i=2
看起来像这样:"10"
. 以字节为单位[49 48]
,在 ASCII 和 Unicode 中,1 是 49,0 是 48。所以我们只需要遍历字符串,从每个 rune(unicode 字符)中减去 48 并将其转换为一个字节。
这是另一种方法:
package main
import (
"bytes"
"fmt"
"math/bits"
)
func unsigned(x uint) []byte {
b := make([]byte, bits.UintSize)
for i := range b {
if bits.LeadingZeros(x) == 0 {
b[i] = 1
}
x = bits.RotateLeft(x, 1)
}
return b
}
func trimUnsigned(x uint) []byte {
return bytes.TrimLeft(unsigned(x), string(0))
}
func main() {
b := trimUnsigned(2)
fmt.Println(b) // [1 0]
}