如何解包一个字节中的 2、2 和 3 位

假设我有 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?


函数式编程
浏览 126回答 1
1回答

婷婷同学_

您需要像已经为c. 我还在 pack 函数中添加了掩码,以防止值意外重叠:const (&nbsp; &nbsp; threeBits = 0x7&nbsp; &nbsp; twoBits&nbsp; &nbsp;= 0x3)func pack(a, b, c byte) byte {&nbsp; &nbsp; return a<<6 | b&twoBits<<4 | c&threeBits}func main() {&nbsp; &nbsp; v := pack(1, 2, 6)&nbsp; &nbsp; a := v >> 6&nbsp; &nbsp; b := v >> 4 & twoBits&nbsp; &nbsp; c := v & threeBits&nbsp; &nbsp; fmt.Println(v, a, b, c)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go