#endianness #numbers #order #byte #reading #read #reader

byte-order

Rust 库,用于读写大端和小端格式的数字

3 个版本 (有破坏性更新)

0.3.0 2021 年 5 月 22 日
0.2.0 2021 年 5 月 22 日
0.1.0 2021 年 5 月 6 日

#43 in #endianness

Download history 44/week @ 2024-03-11 39/week @ 2024-03-18 50/week @ 2024-03-25 120/week @ 2024-04-01 46/week @ 2024-04-08 47/week @ 2024-04-15 47/week @ 2024-04-22 37/week @ 2024-04-29 42/week @ 2024-05-06 33/week @ 2024-05-13 34/week @ 2024-05-20 31/week @ 2024-05-27 40/week @ 2024-06-03 40/week @ 2024-06-10 33/week @ 2024-06-17 43/week @ 2024-06-24

每月 160 次下载
6 个crate中使用了(通过 loco-protocol

MIT 许可证

44KB
240

byte-order  Build Status Latest Version

Rust 库,用于读写大端和小端格式的数字。docs.rs 上查看文档 此处.

许可证

此crate作为开源软件提供,遵循MIT 许可证的条款。


lib.rs:

此crate提供了便利的方法来对数字进行大端和小端字节序的编码和解码。

crate的组织结构简单。结构体NumberReader封装了一些reader,并提供便利的方法来读取Rust中除了具有平台相关大小的数字(usizeisize)之外的每种类型的数字。同样,结构体NumberWriter也为writers执行同样的操作。最后,名为ByteOrder的枚举用于区分NumberReaderNumberWriter结构体执行操作的字节序。

示例

从reader中读取无符号16位大端整数

use std::io::{self, Cursor};
use byte_order::{ByteOrder, NumberReader};

fn main() -> io::Result<()> {
    let src = Cursor::new(vec![0x12, 0x34, 0x56, 0x78]);

    let mut be_reader = NumberReader::with_order(ByteOrder::BE, src);
    assert_eq!(0x1234u16, be_reader.read_u16()?);
    assert_eq!(0x5678u16, be_reader.read_u16()?);

    Ok(())
}

将无符号16位小端整数写入writer

use std::io;
use byte_order::{ByteOrder, NumberWriter};

fn main() -> io::Result<()> {
    let mut le_writer = NumberWriter::with_order(ByteOrder::LE, vec![]);
    le_writer.write_u16(0x1234)?;
    le_writer.write_u16(0x5678)?;
    assert_eq!(le_writer.into_inner(), vec![0x34, 0x12, 0x78, 0x56]);

    Ok(())
}

替代方案

此crate是byteorder的替代品。在设计层面,byte_order的不同之处在于排除了扩展特性和在创建NumberReaderNumberWriter时一次决定字节序的能力,而不是每次操作时都决定。

byteorderbyte_order之间的性能可比较。强烈建议您比较这两个crate,并使用最适合您特定用例的。

同样,自Rust 1.32版本起,标准数值类型提供了内置方法,如to_le_bytesfrom_be_bytes,支持许多相同的使用场景。

无运行时依赖