#little-endian #endianness #big-endian #byte #binary

无需 std byteorder-lite

用于读取/写入大端和小端格式的数字的库

1 个不稳定版本

0.1.0 2024年4月7日

#544编码

Download history 46653/week @ 2024-05-01 44546/week @ 2024-05-08 43751/week @ 2024-05-15 35717/week @ 2024-05-22 30570/week @ 2024-05-29 32584/week @ 2024-06-05 38104/week @ 2024-06-12 39762/week @ 2024-06-19 41553/week @ 2024-06-26 41759/week @ 2024-07-03 43969/week @ 2024-07-10 54613/week @ 2024-07-17 89926/week @ 2024-07-24 127677/week @ 2024-07-31 136097/week @ 2024-08-07 130874/week @ 2024-08-14

497,872 每月下载量
1,031 个 crate 中使用 (2 个直接使用)

Unlicense OR MIT

145KB
2.5K SLoC

byteorder-lite

crates.io Documentation Build Status

这个 crate 是 byteorder crate 的分支,设置了 #![forbid(unsafe_code)]。它包含原始 crate 中所有的特性和大多数方法,但必须删除 ReadBytesExt::read_*_into 系列方法,因为它们目前无法在不安全代码的情况下实现。

byteorder-lite 与主要的 byteorder crate 无关。


lib.rs:

这个 crate 是 byteorder crate 的分支,设置了 #![forbid(unsafe_code)]。它包含原始 crate 中所有的特性和大多数方法,但必须删除 ReadBytesExt::read_*_into 系列方法,因为它们目前无法在不安全代码的情况下实现。

crate 的组织结构非常简单。一个名为 ByteOrder 的特质,指定了 Rust 中每种数字类型的字节转换方法(不包括大小与平台相关的数字,如 usizeisize)。两个类型,BigEndianLittleEndian 实现了这些方法。最后,ReadBytesExtWriteBytesExt 为所有实现 ReadWrite 的类型提供了便利的方法。

提供了一个别名,NetworkEndian,用于 BigEndian,以帮助提高代码的可读性。

还提供了一个额外的别名,NativeEndian,用于本地平台的字节序。这在需要序列化数据且不希望进行转换时非常有用。

示例

Read 类型中读取无符号 16 位大端整数

use std::io::Cursor;
use byteorder_lite::{BigEndian, ReadBytesExt};

let mut rdr = Cursor::new(vec![2, 5, 3, 0]);
// Note that we use type parameters to indicate which kind of byte order
// we want!
assert_eq!(517, rdr.read_u16::<BigEndian>().unwrap());
assert_eq!(768, rdr.read_u16::<BigEndian>().unwrap());

将无符号 16 位小端整数写入 Write 类型

use byteorder_lite::{LittleEndian, WriteBytesExt};

let mut wtr = vec![];
wtr.write_u16::<LittleEndian>(517).unwrap();
wtr.write_u16::<LittleEndian>(768).unwrap();
assert_eq!(wtr, vec![5, 2, 0, 3]);

可选功能

此 crate 也可以在不使用标准库的情况下使用。

替代方案

标准数值类型提供了内置方法如 to_le_bytesfrom_le_bytes,支持一些相同的用例。

无运行时依赖