为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
函数式编程 2022-01-04 13:26:53
假设我有 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)

}


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信