一尘不染

从Golang的阅读器中读取<8位

go

在Golang中处理原始IP软件包时,遇到了一个问题,我似乎无法找到以下解决方案:

IPv4的说明书中包含有大于8位小字段。例如,版本或报头长度(每个4位)或标志(3位)。

如何从io.Reader中读取这些值,然后再使用Golang处理它们?到目前为止,我一直在使用binary.Read方法,但是由于Golang中最小的整数类型是int8,因此在这种情况下是不可能的。


阅读 253

收藏
2020-07-02

共1个答案

一尘不染

io.Reader只能读取字节,不能读取位。您可以做的是读取字节并自己提取位:

var (
    byte0 byte = 0xAF
    byte5 byte = 0x89
)

version := byte0 >> 4
headerLength := byte0 & 0x0F
flags := byte5 >> 5
当然,另一种方法是编写一个BitReader类型,它当然可能会更有效,但是您会明白的:http
//play.golang.org/p/Wyr_K9YAro :)
2020-07-02