我需要解析一个由两个字节组成的网络数据包:第一个由8位组成,这些位根据其顺序(例如)设置某些标志,第二个为uint8(这很简单)
如何从字节原语解析它?
答案 0 :(得分:0)
用于处理二进制文件的一些有用的Go标准库软件包:
要从一个字节中提取单个位,应使用按位运算符-|
,&
和>>
。
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。