Black Lives Matter. Support the Equal Justice Initiative.

Package binary

import "encoding/binary"
Overview
Index
Examples

Overview ▾

二进制程序包实现数字和字节序列之间的简单转换以及varint的编码和解码.

Numbers are translated by reading and writing fixed-size values. A fixed-size value is either a fixed-size arithmetic type (bool, int8, uint8, int16, float32, complex64, ...) or an array or struct containing only fixed-size values.

varint函数使用可变长度编码对单个整数值进行编码和解码; 较小的值需要较少的字节. 有关规范,请参见https://developers.google.com/protocol-buffers/docs/encoding .

该软件包偏向于简单而不是效率. 需要高性能序列化的客户,特别是对于大型数据结构的客户,应查看更高级的解决方案,例如编码/目标包或协议缓冲区.

Constants

MaxVarintLenN是varint编码的N位整数的最大长度.

const (
    MaxVarintLen16 = 3
    MaxVarintLen32 = 5
    MaxVarintLen64 = 10
)

Variables

BigEndian是ByteOrder的big-endian实现.

var BigEndian bigEndian

LittleEndian是ByteOrder的little-endian实现.

var LittleEndian littleEndian

func PutUvarint

func PutUvarint(buf []byte, x uint64) int

PutUvarint将uint64编码为buf并返回写入的字节数. 如果缓冲区太小,PutUvarint会惊慌.

Example

01
02
7f
8001
ff01
8002

func PutVarint

func PutVarint(buf []byte, x int64) int

PutVarint将int64编码为buf,并返回写入的字节数. 如果缓冲区太小,PutVarint会惊慌.

Example

8101
7f
03
01
00
02
04
7e
8001

func Read

func Read(r io.Reader, order ByteOrder, data interface{}) error

读取将结构化的二进制数据从r读取到数据中. 数据必须是指向固定大小值的指针或固定大小值的切片. 从r读取的字节使用指定的字节顺序解码,并写入数据的连续字段. 解码布尔值时,会将零字节解码为false,而将任何其他非零字节解码为true. 读入结构时,将跳过具有空白(_)字段名称的字段的字段数据; 即,空白字段名称可用于填充. 读入结构时,必须导出所有非空白字段,否则"读"可能会崩溃.

仅当未读取任何字节时,错误才是EOF. 如果在读取了一些但不是全部字节后发生EOF,则Read返回ErrUnexpectedEOF.

Example

3.141592653589793

示例(多)

3.141592653589793
255
01 02 03
61374

func ReadUvarint

func ReadUvarint(r io.ByteReader) (uint64, error)

ReadUvarint从r读取一个编码的无符号整数,并将其作为uint64返回.

func ReadVarint

func ReadVarint(r io.ByteReader) (int64, error)

ReadVarint从r读取一个编码的带符号整数,并将其作为int64返回.

func Size

func Size(v interface{}) int

Size返回Write将生成多少字节以对值v进行编码,该值必须是固定大小的值或固定大小的值的切片,或者是指向此类数据的指针. 如果v都不是,则Size返回-1.

func Uvarint

func Uvarint(buf []byte) (uint64, int)

Uvarint从buf解码uint64并返回该值和读取的字节数(> 0). 如果发生错误,则值为0,字节数n为<= 0,表示:

n == 0: buf too small
n  < 0: value larger than 64 bits (overflow)
        and -n is the number of bytes read

Example

1
2
127
128
255
256

func Varint

func Varint(buf []byte) (int64, int)

Varint从buf解码int64并返回该值和读取的字节数(> 0). 如果发生错误,则值为0,字节数n为<= 0,含义如下:

n == 0: buf too small
n  < 0: value larger than 64 bits (overflow)
        and -n is the number of bytes read

Example

-65
-64
-2
-1
0
1
2
63
64

func Write

func Write(w io.Writer, order ByteOrder, data interface{}) error

Write将数据的二进制表示形式写入w. 数据必须是固定大小的值或固定大小的值的切片,或者是指向此类数据的指针. 布尔值编码为一个字节:1表示true,0表示false. 写入w的字节使用指定的字节顺序进行编码,并从数据的连续字段中读取. 写入结构时,将为具有空白(_)字段名称的字段写入零值.

Example

18 2d 44 54 fb 21 09 40

示例(多)

beefcafe

type ByteOrder

ByteOrder指定如何将字节序列转换为16位,32位或64位无符号整数.

type ByteOrder interface {
    Uint16([]byte) uint16
    Uint32([]byte) uint32
    Uint64([]byte) uint64
    PutUint16([]byte, uint16)
    PutUint32([]byte, uint32)
    PutUint64([]byte, uint64)
    String() string
}

示例(获取)

0x03e8 0x07d0

示例(放置)

e8 03 d0 07

by  ICOPY.SITE