Go中无符号整数的二进制表示

时间:2013-10-23 23:00:11

标签: go bit-manipulation

是否有内置函数将uint转换为一片二进制整数{0,1}

>> convert_to_binary(2)
[1, 0]

2 个答案:

答案 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]
}

https://golang.org/pkg/math/bits#LeadingZeros