假设我有3个字节(2x2bit和1x3bit),打包如下:
func pack(a, b, c byte) byte { // is there a more efficient way to pack them?
return a<<6 | b<<4 | c
}
func main() {
v := pack(1, 2, 6)
a := v >> 6
b := v >> 4 // wrong
c := v & 7
fmt.Println(v, a, b, c)
}
如何解压缩b
发布于 2016-04-12 20:42:18
您需要像已经为c
所做的那样屏蔽未使用的位元。我还在pack功能中添加了掩码,以防止值的意外重叠:
const (
threeBits = 0x7
twoBits = 0x3
)
func pack(a, b, c byte) byte {
return a<<6 | b&twoBits<<4 | c&threeBits
}
func main() {
v := pack(1, 2, 6)
a := v >> 6
b := v >> 4 & twoBits
c := v & threeBits
fmt.Println(v, a, b, c)
}
https://stackoverflow.com/questions/36583504
复制相似问题