是否有内置函数将uint
转换为一片二进制整数{0,1}
?
>> convert_to_binary(2)
[1, 0]
答案 0 :(得分:2)
我不知道这样的功能,但您可以使用strconv.FormatUint
来实现此目的。
示例(on play):
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]
,因为1是49,而ASCII和Unicode中的0是48。所以我们只需要遍历字符串,从每个符文中减去48(unicode字符)并将其转换为一个字节。
答案 1 :(得分:0)
这是另一种方法:
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]
}