2个不稳定版本
0.2.0 | 2023年11月7日 |
---|---|
0.1.0 | 2023年11月7日 |
#1708 in 编码
31KB
518 行
为在大小端之间进行数字编码和解码提供了便利方法。
原始整数实现了 BitEndian
。
use bitendian::BitEndian;
let it: u16 = 256;
assert_eq!(BitEndian::to_be_bytes(it), [1, 0]);
assert_eq!(BitEndian::to_le_bytes(it), [0, 1]);
扩展方法提供了便利的读取器和写入器。
use bitendian::{io::WriteExt as _, tokio::AsyncReadExt as _};
let mut buf = vec![];
buf.write_be(1u16)?;
let swapped = buf.as_slice().read_le().await?;
assert_eq!(256u16, swapped);
与 byteorder
进行比较。
- 该crate利用类型推断来避免定义大量的例如 write_uXX 方法。
use byteorder::{ReadBytesExt as _, BE, LE}; use bitendian::io::ReadExt as _; use std::io; fn read_header(mut r: impl io::Read) -> io::Result<Header> { // before... Ok(Header { count: r.read_u16::<BE>()?, // ^ this can be inferred offset: r.read_i32::<LE>()? // ^ this could be a plain method }) // after Ok(Header { count: r.read_be()?, offset: r.read_le()?, }) }
- 该crate支持运行时端序。
- 该crate分别通过
futures
和tokio
功能支持futures::io
和tokio::io
。 - 该crate仅支持Rust的内置类型,例如不支持
u24
。 - 两个crate都通过禁用默认的
std
功能来支持#![no_std]
。
依赖项
~0–1.3MB
~22K SLoC