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