#endian #read-write #read #write

rw-utils

提供各种实用方法的集合,以增强 Rust 的 Read 和 Write 特性,用于读取/写入结构化数据。

1 个不稳定版本

0.0.1 2024 年 3 月 4 日

#76 in #endian


用于 heapbuf

MIT/Apache

105KB
1.5K SLoC

rw-utils

提供各种实用方法的集合,以增强 Rust 的 Read 和 Write 特性,用于读取/写入结构化数据。

实用工具

  • 以小端和大端格式读取/写入所有 Rust 整数类型。
  • 以小端和大端格式读取/写入所有整数类型的数据结构(vec/slice)。
  • 读取/写入任意大小的有符号和无符号 leb128。
  • 以各种编码方式读取/写入字符串。
    • 特别提到一个用于读取/写入与 Java 的 DataInput/DataOutput readUTF/writeUTF 方法兼容的字符串的方法。

示例

此示例使用 File 实现了 Read 或 Write。您可以使用这些特性的任何实现来完成此操作。 Vec<u8>/Cursor/...

use std::io;
use rw_utils::num_read::NumRead;
use rw_utils::num_write::NumWrite;

fn main() -> io::Result<()> {
  let mut file = File::create("/tmp/somefile")?;
  //Write u16 in little endian
  file.write_u16_le(0x4418u16)?;
  //Write u16 in big endian
  file.write_u16_be(0x4418u16)?;
  drop(file);
  
  let mut file = File::open("/tmp/somefile")?;
  //Read u16 in little endian
  assert_eq!(file.read_u16_le()?, 0x4418u16);
  //Read u16 in big endian
  assert_eq!(file.read_u16_be()?, 0x4418u16);

  return Ok(());
}

Cargo 功能

为了在使用此库时减少二进制文件的大小,默认功能为空。为了让此库发挥作用,您需要添加以下列表中的至少一个功能

  • "num_read"
  • "num_write"
  • "string_read"
  • "string_write"
  • "leb128_read"
  • "leb128_write"
  • "to_write"
  • "from_read"

如果您想要所有功能,可以添加 "all" 功能。

Cargo.toml

[dependencies]
rw-utils = {version = "*", features = ["all"]}

依赖关系

~0–350KB