arrays - 从字节切片中提取位到 int 切片中
问题描述
我有以下字节片,我需要从中提取位并将它们放在 []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 切片来进一步访问位值。
我需要在这里使用位移运算符吗?任何帮助将不胜感激。
解决方案
一种方法是遍历字节,并使用第二个循环逐位移动字节值并使用位掩码测试位。并将结果添加到输出切片。
这是它的一个实现:
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]
推荐阅读
- android - Android Pie 9.0 将用户带到通知中心
- swift - `UIImagePickerControllerOriginalImage`、`UIImagePickerControllerCropRect`和`UIImagePickerControllerEditedImage`如何关联?
- amazon-web-services - aws documentdb 上的 Mongodb db.collection.distinct() 不使用索引
- c# - .net core - 传递未知数量的 IProgress
到类库 - ruby-on-rails - 将嵌套属性添加到现有对象
- arrays - 使用 array.map() 创建组件时如何动态分配 Prop 值
- objective-c - 使用method_getReturnType调用特定类型的实例成员函数
- javascript - COALESCE 加入 JAVASCRIPT
- react-admin - 如何在编辑表单中预填充 ImageInput 内的 ImageField,或采取正确的方法
- java - 对于具有所需角色的用户 hasRole 失败并显示 403 错误消息