Package binary
Overview ▸
Index ▸
Constants
MaxVarintLenN is the maximum length of a varint-encoded N-bit integer.
const ( MaxVarintLen16 = 3 MaxVarintLen32 = 5 MaxVarintLen64 = 10 )
Variables
BigEndian is the big-endian implementation of ByteOrder and AppendByteOrder.
var BigEndian bigEndian
LittleEndian is the little-endian implementation of ByteOrder and AppendByteOrder.
var LittleEndian littleEndian
NativeEndian is the native-endian implementation of ByteOrder and AppendByteOrder.
var NativeEndian nativeEndian
func Append ¶ 1.23
func Append(buf []byte, order ByteOrder, data any) ([]byte, error)
Append appends the binary representation of data to buf. buf may be nil, in which case a new buffer will be allocated. See Write on which data are acceptable. It returns the (possibily extended) buffer containing data or an error.
func AppendUvarint ¶ 1.19
func AppendUvarint(buf []byte, x uint64) []byte
AppendUvarint appends the varint-encoded form of x, as generated by PutUvarint, to buf and returns the extended buffer.
func AppendVarint ¶ 1.19
func AppendVarint(buf []byte, x int64) []byte
AppendVarint appends the varint-encoded form of x, as generated by PutVarint, to buf and returns the extended buffer.
func Decode ¶ 1.23
func Decode(buf []byte, order ByteOrder, data any) (int, error)
Decode decodes binary data from buf into data according to the given byte order. It returns an error if buf is too small, otherwise the number of bytes consumed from buf.
func Encode ¶ 1.23
func Encode(buf []byte, order ByteOrder, data any) (int, error)
Encode encodes the binary representation of data into buf according to the given byte order. It returns an error if buf is too small, otherwise the number of bytes written into buf.
func PutUvarint ¶
func PutUvarint(buf []byte, x uint64) int
PutUvarint encodes a uint64 into buf and returns the number of bytes written. If the buffer is too small, PutUvarint will panic.
▸ Example
func PutVarint ¶
func PutVarint(buf []byte, x int64) int
PutVarint encodes an int64 into buf and returns the number of bytes written. If the buffer is too small, PutVarint will panic.
▸ Example
func Read ¶
func Read(r io.Reader, order ByteOrder, data any) error
Read reads structured binary data from r into data. Data must be a pointer to a fixed-size value or a slice of fixed-size values. Bytes read from r are decoded using the specified byte order and written to successive fields of the data. When decoding boolean values, a zero byte is decoded as false, and any other non-zero byte is decoded as true. When reading into structs, the field data for fields with blank (_) field names is skipped; i.e., blank field names may be used for padding. When reading into a struct, all non-blank fields must be exported or Read may panic.
The error is io.EOF only if no bytes were read. If an io.EOF happens after reading some but not all the bytes, Read returns io.ErrUnexpectedEOF.
▸ Example
▸ Example (Multi)
func ReadUvarint ¶
func ReadUvarint(r io.ByteReader) (uint64, error)
ReadUvarint reads an encoded unsigned integer from r and returns it as a uint64. The error is io.EOF only if no bytes were read. If an io.EOF happens after reading some but not all the bytes, ReadUvarint returns io.ErrUnexpectedEOF.
func ReadVarint ¶
func ReadVarint(r io.ByteReader) (int64, error)
ReadVarint reads an encoded signed integer from r and returns it as an int64. The error is io.EOF only if no bytes were read. If an io.EOF happens after reading some but not all the bytes, ReadVarint returns io.ErrUnexpectedEOF.
func Size ¶
func Size(v any) int
Size returns how many bytes Write would generate to encode the value v, which must be a fixed-size value or a slice of fixed-size values, or a pointer to such data. If v is neither of these, Size returns -1.
func Uvarint ¶
func Uvarint(buf []byte) (uint64, int)
Uvarint decodes a uint64 from buf and returns that value and the number of bytes read (> 0). If an error occurred, the value is 0 and the number of bytes n is <= 0 meaning:
- n == 0: buf too small;
- n < 0: value larger than 64 bits (overflow) and -n is the number of bytes read.
▸ Example
func Varint ¶
func Varint(buf []byte) (int64, int)
Varint decodes an int64 from buf and returns that value and the number of bytes read (> 0). If an error occurred, the value is 0 and the number of bytes n is <= 0 with the following meaning:
- n == 0: buf too small;
- n < 0: value larger than 64 bits (overflow) and -n is the number of bytes read.
▸ Example
func Write ¶
func Write(w io.Writer, order ByteOrder, data any) error
Write writes the binary representation of data into w. Data must be a fixed-size value or a slice of fixed-size values, or a pointer to such data. Boolean values encode as one byte: 1 for true, and 0 for false. Bytes written to w are encoded using the specified byte order and read from successive fields of the data. When writing structs, zero values are written for fields with blank (_) field names.
▸ Example
▸ Example (Multi)
type AppendByteOrder ¶ 1.19
AppendByteOrder specifies how to append 16-, 32-, or 64-bit unsigned integers into a byte slice.
It is implemented by LittleEndian, BigEndian, and NativeEndian.
type AppendByteOrder interface { AppendUint16([]byte, uint16) []byte AppendUint32([]byte, uint32) []byte AppendUint64([]byte, uint64) []byte String() string }
type ByteOrder ¶
A ByteOrder specifies how to convert byte slices into 16-, 32-, or 64-bit unsigned integers.
It is implemented by LittleEndian, BigEndian, and NativeEndian.
type ByteOrder interface { Uint16([]byte) uint16 Uint32([]byte) uint32 Uint64([]byte) uint64 PutUint16([]byte, uint16) PutUint32([]byte, uint32) PutUint64([]byte, uint64) String() string }
▸ Example (Get)
▸ Example (Put)