#leb128 #dwarf #read-write #byte-sequences

wasabi_leb128

读取和写入可变长度 LEB128 数字格式

2 个不稳定版本

0.4.0 2020年3月6日
0.3.0 2019年10月2日

#1650 in 编码

Download history 96/week @ 2024-04-06 324/week @ 2024-04-13 336/week @ 2024-04-20 368/week @ 2024-04-27 91/week @ 2024-05-04 101/week @ 2024-05-11 123/week @ 2024-05-18 287/week @ 2024-05-25 232/week @ 2024-06-01 338/week @ 2024-06-08 304/week @ 2024-06-15 447/week @ 2024-06-22 518/week @ 2024-06-29 590/week @ 2024-07-06 681/week @ 2024-07-13 383/week @ 2024-07-20

2,235 每月下载量
shards 中使用

MIT 许可证

23KB
296

wasabi_leb128 构建状态

读取和写入可变长度 LEB128 数字格式。例如

use wasabi_leb128::{ReadLeb128, WriteLeb128};

// Vec<u8> as byte-oriented reader/writer.
let mut buf = Vec::new();

// Encoding/writing a u16 as an LEB128 byte sequence.
let original_value: u16 = 128;
buf.write_leb128(original_value).unwrap();
assert_eq!(buf, [0x80, 0x01]);

// Decoding/reading an LEB128 number back to a u16.
let value: u16 = buf.as_slice().read_leb128().unwrap();
assert_eq!(value, original_value);

更多信息,请参阅


lib.rs:

读取和写入可变长度 LEB128 数字格式。

LEB128 ("小端基 128") 被用于,例如在 DWARF 调试信息 (见附录 4 中的 C 伪代码) 和 WebAssembly 二进制格式 中。

示例

use wasabi_leb128::{ReadLeb128, WriteLeb128};

// Vec<u8> as byte-oriented reader/writer.
let mut buf = Vec::new();

// Encoding/writing a u16 as an LEB128 byte sequence.
let original_value: u16 = 128;
buf.write_leb128(original_value).unwrap();
assert_eq!(buf, [0x80, 0x01]);

// Decoding/reading an LEB128 number back to a u16.
let (value, bytes_read): (u16, usize) = buf.as_slice().read_leb128().unwrap();
assert_eq!(value, original_value);

有关更多信息,请参阅 ReadLeb128WriteLeb128 特性。

相关工作

其他开源 LEB128 数字实现

此 crate 与现有 Rust 实现在 parity-wasmleb128 之间的差异

  • 适用于所有原始整数(而不仅仅是 u64i64)。
  • 一个单一的、合并的实现,适用于有符号/无符号以及所有大小(归功于 num_traits)。
  • 在解析时对所有目标类型进行适当的溢出检查。
  • (希望如此:)易于理解,内联注释和说明。

依赖项

~155KB