一尘不染

从字节片提取位到int片中

go

我有以下字节片,我需要从中提取位并将它们放置在[] int中,因为我打算稍后再获取各个位值。我很难弄清楚该怎么做。

下面是我的代码

data := []byte{3 255}//binary representation is for 3 and 255 is 00000011 11111111

我需要的是一点点-> [0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1]

我试过了

  • 我尝试使用BigEndian将字节片转换为Uint16,然后尝试使用,strconv.FormatUint但由于错误而失败panic: runtime error: index out of range
  • 看到了很多示例,这些示例使用fmt.Printf函数来简单地输出数字的位表示形式,但这对我没有用,因为我需要一个int切片来进一步访问位值。

我需要在这里使用移位运算符吗?任何帮助将不胜感激。


阅读 219

收藏
2020-07-02

共1个答案

一尘不染

一种方法是遍历字节,并使用第二次循环逐位移位字节值,并使用位掩码测试位。并将结果添加到输出切片。

这是它的实现:

func bits(bs []byte) []int {
    r := make([]int, len(bs)*8)
    for i, b := range bs {
        for j := 0; j < 8; j++ {
            r[i*8+j] = int(b >> uint(7-j) & 0x01)
        }
    }
    return r
}

测试它:

fmt.Println(bits([]byte{3, 255}))

输出(在Go Playground上尝试):

[0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]
2020-07-02