#varint #zigzag #io-read #google #io-write #signed-integer #read-write

no-std varint-rs

一个在Rust中实现的轻量级、零依赖varint库

17个稳定版本

2.2.0 2020年11月25日
2.1.4 2020年11月25日
1.1.5 2020年11月23日

排名392编码

Download history 33918/week @ 2024-03-14 35625/week @ 2024-03-21 45683/week @ 2024-03-28 45962/week @ 2024-04-04 54188/week @ 2024-04-11 52146/week @ 2024-04-18 50279/week @ 2024-04-25 55573/week @ 2024-05-02 57519/week @ 2024-05-09 61123/week @ 2024-05-16 65884/week @ 2024-05-23 77432/week @ 2024-05-30 77065/week @ 2024-06-06 70696/week @ 2024-06-13 61535/week @ 2024-06-20 71829/week @ 2024-06-27

每月下载301,215
18个crate中(直接使用6个)使用

Apache-2.0

20KB
273

crates.io docs.rs crates.io

Varint-rs

Varint是一种存储整数数的替代方式。

Varints允许在更小的空间中存储更大的整数类型。这是通过使用最显著位上的标志和7位来存储整数。当需要读取更多字节时,将标志设置为1。然后从最低有效组开始添加7位的组。

功能

  • signed(默认):允许使用zigzag编码来编码和解码有符号整数
  • std(默认):分别在所有std::io::Read实现者和所有std::io::Write实现者上实现VarintReaderVarintWriter特质
    • 所有std::io::Read实现者
    • 所有std::io::Write实现者

注意:禁用std功能(默认启用)允许在#![no_std]环境中使用crate。

示例

// to allow the use of the `VarintWriter::write_*_varint` functions
use varint_rs::VarintWriter;
// to allow the use of the `VarintReader::read_*_varint` functions
use varint_rs::VarintReader;

// an example to use for the buffer
use std::io::Cursor;

// create an i32 set to `300`
let number: i32 = 300;
// create a buffer for the varint to be writen to
// an i32 can be `4` bytes maximum, so we pre-allocate the capacity
let mut buffer: Cursor<Vec<u8>> = Cursor::new(Vec::with_capacity(4));

// now we can write the varint into the buffer
// `300` should only use `2` bytes instead of all `4`
// the `write_*_varint` functions may return an `std::io::Error`
buffer.write_i32_varint(number).unwrap();

// we reset the cursor pos back to `0`, this isn't varint stuff
buffer.set_position(0);

// now we can read the varint from the buffer
// we should read `300` which was the number we stored
// the `read_*_varint` functions may return an `std::io::Error`
let number: i32 = buffer.read_i32_varint().unwrap();

注意:此示例假设正在使用默认功能。

致谢

此代码的大部分内容是从varint crate由Cruz Bishop移植的。向他们表示衷心的感谢,因为他们提供了出色的算法!

无运行时依赖

功能