在Golang中处理原始IP包时遇到了一个我似乎无法找到解决方案的问题:
IPv4 specification包含小于8位的字段。例如版本或标头长度(每个4位)或标志(3位)。
如何从io.Reader读取这些值并在之后使用Golang处理它们?到目前为止,我一直在使用binary.Read方法,但由于Golang中最小的整数类型是int8,因此在这种情况下不可能。
答案 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:)