从Golang的阅读器读取<8位

Jan*_*old 7 go

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

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

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

rig*_*old 10

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

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

version := byte0 >> 4
headerLength := byte0 & 0x0F
flags := byte5 >> 5
Run Code Online (Sandbox Code Playgroud)

当然,另一种方法是编写一个BitReader类型,当然可以更有效但你明白了:http://play.golang.org/p/Wyr_K9YAro :)