Golang:从字节中解析位值

时间:2019-02-21 14:21:14

标签: go

我需要解析一个由两个字节组成的网络数据包:第一个由8位组成,这些位根据其顺序(例如)设置某些标志,第二个为uint8(这很简单)

  • 1-在线
  • 0-无效
  • 1-isPretty
  • 1-isHandsome
  • 0-秃头
  • 0-聋哑
  • 0-静音
  • 0-盲人

如何从字节原语解析它?

1 个答案:

答案 0 :(得分:0)

用于处理二进制文件的一些有用的Go标准库软件包:

要从一个字节中提取单个位,应使用按位运算符-|&>>

For example

package main

import (
    "fmt"
)

func main() {
    v := byte(0xB2)
    if (v >> 4) & 1 == 1 {
        fmt.Println("bit 4 (counting from 0) is set")
    }
}

此操作通过将字节值向右移动4个位置并用1 AND来检查第4位(位0是字节中的最低位)。您可以检查标志值中的其他位同样。随意编写一个函数,用参数N替换上面示例中的4,以检查位数N

您可以在其他SO答案中找到更多示例,例如this one或在评论中链接到的@icza。