假設我有 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 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消