binary

std.encoding.binary

def Order

pub def Order: u8

多字节值的字节顺序

val LITTLE

pub val LITTLE: Order = 0

val BIG

pub val BIG:    Order = 1

fun put_uint

pub fun put_uint(dst: *u8, v: u64, sz: usize, order: Order);

以给定顺序将 v 的低 sz 个字节写入 dst

dstsz 字节的目标位置 v:要写入其低 sz 个字节的值 sz:要写入的字节数(1..8) order:字节顺序

fun get_uint

pub fun get_uint(src: *u8, sz: usize, order: Order) u64;

以给定顺序从 src 读取 sz 个字节到一个 u64 中

srcsz 字节的来源 sz:要读取的字节数(1..8) order:字节顺序 ret:组装在低 sz 字节中的值

rec Encoder

pub rec Encoder;

具有固定字节顺序的可增长字节序列

alloc:用于缓冲区内存的分配器 order:多字节写入的字节顺序 data:后备字节数组 len:已写入的字节数 cap:已分配容量

fun encoder

pub fun encoder(a: *A.Allocator, order: Order) Encoder;

创建一个空编码器

a:用于缓冲区内存的分配器 order:多字节写入的字节顺序 ret:一个新的空 Encoder

fun encoder_dnit

pub fun encoder_dnit(e: *Encoder) bool;

释放编码器的缓冲区并将其重置

e:要反初始化的编码器 ret:如果内存已释放则为 true

fun reserve

pub fun reserve(e: *Encoder, additional: usize) R.Result[usize, str];

为额外的 additional 字节预留容量

e:要在其中预留空间的编码器 additional:所需的额外字节数 ret:新容量,或一个错误

fun write_u8

pub fun write_u8(e: *Encoder, v: u8) R.Result[usize, str];

追加一个 u8

e:要写入的编码器 v:要追加的值 ret:新长度,或一个错误

fun write_u16

pub fun write_u16(e: *Encoder, v: u16) R.Result[usize, str];

以编码器的字节顺序追加一个 u16

e:要写入的编码器 v:要追加的值 ret:新长度,或一个错误

fun write_u32

pub fun write_u32(e: *Encoder, v: u32) R.Result[usize, str];

以编码器的字节顺序追加一个 u32

e:要写入的编码器 v:要追加的值 ret:新长度,或一个错误

fun write_u64

pub fun write_u64(e: *Encoder, v: u64) R.Result[usize, str];

以编码器的字节顺序追加一个 u64

e:要写入的编码器 v:要追加的值 ret:新长度,或一个错误

fun write_bytes

pub fun write_bytes(e: *Encoder, p: *u8, len: usize) R.Result[usize, str];

原样追加原始字节

e:要写入的编码器 p:源字节 len:字节数 ret:新长度,或一个错误

fun write_str

pub fun write_str(e: *Encoder, s: str) R.Result[usize, str];

追加一个字符串及其空终止符

e:要写入的编码器 s:要追加的字符串 ret:新长度,或一个错误

fun align

pub fun align(e: *Encoder, boundary: usize) R.Result[usize, str];

用零字节填充直到对齐边界

e:要对齐的编码器 boundary:对齐边界(2 的幂) ret:新长度,或一个错误

fun patch_u16

pub fun patch_u16(e: *Encoder, offset: usize, v: u16) R.Result[usize, str];

以编码器的字节顺序覆盖较早偏移量处的 u16

e:要打补丁的编码器 offset:写入的字节偏移量 v:要写入的值 ret:已写入的字节数,或一个错误

fun patch_u32

pub fun patch_u32(e: *Encoder, offset: usize, v: u32) R.Result[usize, str];

以编码器的字节顺序覆盖较早偏移量处的 u32

e:要打补丁的编码器 offset:写入的字节偏移量 v:要写入的值 ret:已写入的字节数,或一个错误

fun patch_u64

pub fun patch_u64(e: *Encoder, offset: usize, v: u64) R.Result[usize, str];

以编码器的字节顺序覆盖较早偏移量处的 u64

e:要打补丁的编码器 offset:写入的字节偏移量 v:要写入的值 ret:已写入的字节数,或一个错误

rec Decoder

pub rec Decoder;

具有固定字节顺序的、遍历现有字节的光标

order:多字节读取的字节顺序 data:字节数据 len:总长度(以字节为单位) pos:当前读取位置

fun decoder

pub fun decoder(data: *u8, len: usize, order: Order) Decoder;

将现有字节包装为定位在偏移量 0 的解码器

data:字节数据 len:长度(以字节为单位) order:多字节读取的字节顺序 ret:一个新的 Decoder

fun read_u8

pub fun read_u8(d: *Decoder) R.Result[u8, str];

读取一个 u8 并前进

d:要从中读取的解码器 ret:该值,或一个错误

fun read_u16

pub fun read_u16(d: *Decoder) R.Result[u16, str];

以解码器的字节顺序读取一个 u16 并前进

d:要从中读取的解码器 ret:该值,或一个错误

fun read_u32

pub fun read_u32(d: *Decoder) R.Result[u32, str];

以解码器的字节顺序读取一个 u32 并前进

d:要从中读取的解码器 ret:该值,或一个错误

fun read_u64

pub fun read_u64(d: *Decoder) R.Result[u64, str];

以解码器的字节顺序读取一个 u64 并前进

d:要从中读取的解码器 ret:该值,或一个错误

fun read_bytes

pub fun read_bytes(d: *Decoder, len: usize) R.Result[*u8, str];

返回指向接下来的 len 个字节的指针并越过它们

d:要从中读取的解码器 len:要消耗的字节数 ret:指向解码器数据的指针,或一个错误

fun read_str

pub fun read_str(d: *Decoder) R.Result[str, str];

读取以空字符结尾的字符串并越过终止符

d:要从中读取的解码器 ret:指向数据中字符串的指针,或一个错误

fun skip

pub fun skip(d: *Decoder, n: usize) R.Result[usize, str];

将光标前进 n 个字节

d:要推进的解码器 n:要跳过的字节数 ret:新位置,或一个错误

fun align_read

pub fun align_read(d: *Decoder, boundary: usize) R.Result[usize, str];

将光标推进到对齐边界

d:要对齐的解码器 boundary:对齐边界(2 的幂) ret:新位置,或一个错误

fun remaining

pub fun remaining(d: *Decoder) usize;

光标和末尾之间剩余的字节数

d:要查询的解码器 ret:未读的字节数