gbianry
gf
框架提供了独立的二进制数据操作包gbinary
,主要用于各种数据类型与[ ]byte
二进制类型之间的相互转换;以及针对于整型数据进行精准按位处理的功能。常用于网络通信时数据编码/解码,以及数据文件操作时的编码/解码。
...
其中的Bit类型表示一个二进制数字(0或1),其定义如下:
type Bit int8
二进制操作示例
我们来看一个比较完整的二进制操作示例,基本演示了绝大部分的二进制转换操作。
...
编码
gbinary.Encode
方法是一个非常强大灵活的方法,可以将所有的基本类型转换为二进制类型([ ]byte
)。在gbinary.Encode
方法内部,会自动对变量进行长度计算,采用最小二进制长度来存放该变量的二进制值。例如,针对int
类型值为1
的变量,gbinary.Encode
将只会用1
个byte
来存储,而int
类型值为300
的变量,将会使用2
个byte
来存储,尽量减少二进制结果的存储空间。因此,在解析的时候要非常注意[ ]byte
的长度,建议能够确定变量长度的地方,在进行二进制编码/解码时,尽量采用形如int8/16/32/64
的定长基本类型来存储变量,这样解析的时候也能够采用对应的变量形式进行解析,不易产生错误。gbinary
包也提供了一系列gbinary.Encode*
的方法,用于将基本数据类型转换为二进制。其中,gbinary.EncodeInt/gbinary.EncodeUint
也是会在内部自动识别变量值大小,返回不定长度的[ ]byte
值,长度范围1/2/4/8
。解码
在二进制类型的解析操作中,二进制的长度(
[ ]byte
的长度)是非常重要的,只有给定正确的长度才能执行正确的解析,因此gbinary.Decode
方法给定的变量长度必须为确定长度类型的变量,例如:int8/16/32/64
、uint8/16/32/64
、float32/64
,而如果给定的第二个变量地址对应的变量类型为int/uint
,无法确定长度,因此解析会失败。此外,
gbinary
包也提供了一系列gbinary.DecodeTo*
的方法,用于将二进制转换为特定的数据类型。其中,gbinary.DecodeToInt/gbinary.DecodeToUint
方法会对二进制长度进行自动识别解析,支持的二进制参数长度范围1-8
。
按位操作处理示例
gbinary
的Bits
相关操作简化了底层二进制位操作的复杂度,为精准的数据按位处理提供了可能。
...