4个稳定版本
| 1.2.0 | 2020年4月25日 |
|---|---|
| 1.1.0 | 2020年4月24日 |
| 1.0.1 | 2020年4月22日 |
#1593 in 编码
每月下载量101
用于 5 个crate (3 个直接使用)
225KB
3.5K SLoC
byteorder - async
这是对byteorder的分支,增加了以下功能:
- 使用现代Rust的try (? 而不是try!)
- 支持
tokio::io - 支持
futures::io
安装
for futures::io
byteorder_async = {version="1.2.0", features=["futures_async"] }
for tokio::io
byteorder_async = {version="1.2.0", features=["tokio_async"] }
基本异步使用
use byteorder_async::ReaderToByteOrder;
let reader : io::AsyncRead = ...;
// after the byte_order its the same calls.
let byte = reader.byte_order().read_u8().await;
注意:调用 byte_order() 的原因是 trait 中尚未支持 async fn。
lib.rs:
此crate提供了对大端或小端顺序编码和解码数字的便利方法。
crate的结构相当简单。一个 trait,ByteOrder,指定了 Rust 中每种数字类型的字节转换方法(不包括像 usize 和 isize 这样具有平台相关大小的数字)。两种类型,BigEndian 和 LittleEndian 实现了这些方法。最后,ReadBytesExt 和 WriteBytesExt 为实现了 Read 和 Write 的所有类型提供了便利方法。
提供了一个别名,NetworkEndian,用于表示BigEndian,以帮助提高代码的可读性。
还提供了一个额外的别名,NativeEndian,用于表示本地平台的字节序。这在需要序列化数据使用时而不需要转换时很方便。
示例
从Read类型中读取无符号16位大端整数
use std::io::Cursor;
use byteorder::{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::{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]);
可选功能
当启用i128功能时,此crate可选地提供对128位值(i128和u128)的支持。
此crate也可以在不使用标准库的情况下使用。
替代方案
请注意,从Rust 1.32开始,标准数字类型提供了内置方法,如to_le_bytes和from_le_bytes,这些方法支持一些相同的用例。
依赖项
~0–1MB
~14K SLoC