[英]Extract bits into a int slice from byte slice
我有以下字节切片,我需要从中提取位并将它们放在[] 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]
我尝试了什么
strconv.FormatUint
但失败并出现错误panic: runtime error: index out of range
fmt.Printf
函数的简单输出位表示数字的例子,但这对我来说fmt.Printf
,因为我需要一个int slice来进行进一步的位值访问。 我需要在这里使用位移操作符吗? 任何帮助将不胜感激。
一种方法是循环遍历字节,并使用第二个循环逐位移位字节值并使用位掩码测试位。 并将结果添加到输出切片。
这是它的一个实现:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.