3 个版本 (有破坏性更新)
0.3.0 | 2021 年 5 月 22 日 |
---|---|
0.2.0 | 2021 年 5 月 22 日 |
0.1.0 | 2021 年 5 月 6 日 |
#43 in #endianness
每月 160 次下载
在 6 个crate中使用了(通过 loco-protocol)
44KB
240 行
byte-order
Rust 库,用于读写大端和小端格式的数字。 在 docs.rs
上查看文档 此处.
许可证
此crate作为开源软件提供,遵循MIT 许可证的条款。
lib.rs
:
此crate提供了便利的方法来对数字进行大端和小端字节序的编码和解码。
crate的组织结构简单。结构体NumberReader
封装了一些reader,并提供便利的方法来读取Rust中除了具有平台相关大小的数字(usize
和isize
)之外的每种类型的数字。同样,结构体NumberWriter
也为writers执行同样的操作。最后,名为ByteOrder
的枚举用于区分NumberReader
和NumberWriter
结构体执行操作的字节序。
示例
从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
的不同之处在于排除了扩展特性和在创建NumberReader
或NumberWriter
时一次决定字节序的能力,而不是每次操作时都决定。
byteorder
和byte_order
之间的性能可比较。强烈建议您比较这两个crate,并使用最适合您特定用例的。
同样,自Rust 1.32版本起,标准数值类型提供了内置方法,如to_le_bytes
和from_be_bytes
,支持许多相同的使用场景。