假设我有 3 个字节(2x2bits 和 1x3bits)这样打包: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?
1 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
您需要像已经为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)
}
- 1 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消