阅读<;来自Golang中的读卡器的8位

阅读<;来自Golang中的读卡器的8位,go,Go,在Golang处理原始IP包时,我遇到了一个问题,我似乎无法找到解决方案: 包含小于8位的字段。例如,版本或标题长度(每个4位)或标志(3位) 如何从io.Reader读取这些值,然后使用Golang进行处理?到目前为止,我一直在使用这个方法,但是因为Golang中最小的整数类型是int8,在这种情况下这是不可能的。io。Reader只能读取字节,不能读取位。您可以自己读取字节并提取位: var ( byte0 byte = 0xAF byte5 byte = 0x89 ) v

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

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


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

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

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

version := byte0 >> 4
headerLength := byte0 & 0x0F
flags := byte5 >> 5

当然,另一种方法是编写一个
位读取器
类型,当然这可能会更有效,但您得到的想法是:)

您可以一次读取一个字节,然后使用a来提取特定字段。