#endianness #binary #io #byteorder #binary-data #io-write

lebe

使用通用 API 的微型、极简、高性能字节序转换

3 个版本

0.5.2 2022年8月16日
0.5.1 2020年2月21日
0.5.0 2020年2月15日

#760Rust 模式

Download history 118516/week @ 2024-03-14 126767/week @ 2024-03-21 134156/week @ 2024-03-28 120381/week @ 2024-04-04 122486/week @ 2024-04-11 122118/week @ 2024-04-18 126373/week @ 2024-04-25 134137/week @ 2024-05-02 125786/week @ 2024-05-09 159557/week @ 2024-05-16 142149/week @ 2024-05-23 148020/week @ 2024-05-30 144807/week @ 2024-06-06 142311/week @ 2024-06-13 127723/week @ 2024-06-20 112771/week @ 2024-06-27

555,557 每月下载量
46 个 crate 中使用 (通过 exr)

BSD-3-Clause

27KB
273

Rust Docs Crate Crate Lines of Code

LEBE

LEBE 是一个微型、极简、高性能的通用 API 字节序转换库。这个 crate 故意没有为每个原始类型提供不同的方法,例如 write_u16(my_value),而是使用泛型类型推理:write(my_u16)

目的

此 crate 有两个明确的目的

  1. 简单的原始数据切片和字节数组之间的转换,无需不安全代码
  2. 简单且快速的将一种字节序转换为另一种字节序

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'(表示大端字节序)组成。如果你用英语发音这个词,德国人可能会认为你说了德语中表示“爱”的词。

无运行时依赖