lebe

Tiny, dead simple, high performance endianness conversions for Rust

Latest version: 0.5.3 registry icon
Maintenance score
8
Safety score
100
Popularity score
71
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.5.3 0 0 0 0 0
0.5.2 0 0 0 0 0
0.5.1 0 0 0 0 0
0.5.0 0 0 0 0 0

Stability
Latest release:

0.5.3 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

BSD-3-Clause   -   BSD 3-Clause "New" or "Revised" License

Not a wildcard

Not proprietary

OSI Compliant



Rust Docs Crate Crate Lines of Code

LEBE

Tiny, dead simple, high performance endianness conversions with a generic API. This crate purposefully does not have a different method, like write_u16(my_value), for each primitive type. Instead, this uses generic type inference: write(my_u16).

Purpose

This crate has exactly two purposes:

  1. Simple conversion between slices of primitives and byte arrays without unsafe code
  2. Simple and fast conversion from one endianness to the other one

The byteorder crate uses Lines of Code for this.

This simplifies reading and writing binary data to files or network streams.

Usage

Write values.

    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();
    }

Read numbers.

    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();
    }

Read slices.

    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();
    }

Convert slices in-place.

    use lebe::Endian;
    
    fn main(){
        let mut numbers: &[i32] = &[ 32, 102, 420, 594 ];
        numbers.convert_current_to_little_endian();
    }

Why not use byteorder?

This crate supports batch-writing slices with native speed where the os has the matching endianness. Writing slices in byteorder must be done manually, and may be slower than expected. This crate does provide u8 and i8 slice operations for completeness. Also, the API of this crate looks simpler.

Why not use endianness?

This crate has no runtime costs, just as byteorder.

Why not use this crate?

The other crates probably have better documentation.

Fun Facts

LEBE is made up from 'le' for little endian and 'be' for big endian. If you say that word using english pronounciation, a german might think you said the german word for 'love'.