3 个版本
0.5.2 | 2022年8月16日 |
---|---|
0.5.1 | 2020年2月21日 |
0.5.0 | 2020年2月15日 |
#760 在 Rust 模式
555,557 每月下载量
在 46 个 crate 中使用 (通过 exr)
27KB
273 行
LEBE
LEBE 是一个微型、极简、高性能的通用 API 字节序转换库。这个 crate 故意没有为每个原始类型提供不同的方法,例如 write_u16(my_value)
,而是使用泛型类型推理:write(my_u16)
。
目的
此 crate 有两个明确的目的
- 简单的原始数据切片和字节数组之间的转换,无需不安全代码
- 简单且快速的将一种字节序转换为另一种字节序
byteorder crate 使用 进行此操作。
这简化了将二进制数据写入文件或网络流。
使用方法
写入值。
use lebe::io::WriteEndian;
use std::io::Write;
fn main(){
let mut output_bytes: Vec<u8> = Vec::new();
let numbers: &[i32] = &[ 32, 102, 420, 594 ];
output_bytes.write_as_little_endian(numbers.len()).unwrap();
output_bytes.write_as_little_endian(numbers).unwrap();
}
读取数字。
use lebe::io::ReadEndian;
use std::io::Read;
fn main(){
let mut input_bytes: &[u8] = &[ 3, 244 ];
let number: u16 = input_bytes.read_from_little_endian().unwrap();
}
读取切片。
use lebe::io::ReadEndian;
use std::io::Read;
fn main(){
let mut input_bytes: &[u8] = &[ 0, 2, 0, 3, 244, 1, 0, 3, 244, 1 ];
let len: u16 = input_bytes.read_from_little_endian().unwrap();
let mut numbers = vec![ 0.0; len as usize ];
input_bytes.read_from_little_endian_into(numbers.as_mut_slice()).unwrap();
}
原地转换切片。
use lebe::Endian;
fn main(){
let mut numbers: &[i32] = &[ 32, 102, 420, 594 ];
numbers.convert_current_to_little_endian();
}
为什么不使用 byteorder?
此 crate 在操作系统具有匹配的字节序时支持以原生速度批量写入切片,而使用 byteorder
必须手动完成,可能比预期慢。此外,此 crate 还提供了 u8 和 i8 切片操作以完善功能。此外,此 crate 的 API 看起来更简单。
为什么不使用 endianness?
此 crate 的运行时成本为零,就像 byteorder
一样。
为什么不使用此 crate?
其他 crate 可能具有更好的文档。
有趣的事实
LEBE 由 'le'(表示小端字节序)和 'be'(表示大端字节序)组成。如果你用英语发音这个词,德国人可能会认为你说了德语中表示“爱”的词。