在Golang中处理原始IP软件包时,遇到了一个问题,我似乎无法找到以下解决方案:
在IPv4的说明书中包含有大于8位小字段。例如,版本或报头长度(每个4位)或标志(3位)。
如何从io.Reader中读取这些值,然后再使用Golang处理它们?到目前为止,我一直在使用binary.Read方法,但是由于Golang中最小的整数类型是int8,因此在这种情况下是不可能的。
io.Reader只能读取字节,不能读取位。您可以做的是读取字节并自己提取位:
io.Reader
var ( byte0 byte = 0xAF byte5 byte = 0x89 ) version := byte0 >> 4 headerLength := byte0 & 0x0F flags := byte5 >> 5
BitReader