阅读<来自Golang的阅读器的8位

时间:2015-04-11 21:05:24

标签: go

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

IPv4 specification包含小于8位的字段。例如版本或标头长度(每个4位)或标志(3位)。

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

1 个答案:

答案 0 :(得分:10)

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:)