在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 :)
归档时间: |
|
查看次数: |
1790 次 |
最近记录: |