You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
993 B
Rust
39 lines
993 B
Rust
#![allow(non_snake_case)]
|
|
|
|
use byteorder::{ByteOrder, LittleEndian, NativeEndian, ReadBytesExt};
|
|
use std::convert::TryInto;
|
|
use std::io;
|
|
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub enum Endian {
|
|
NativeEndian,
|
|
LittleEndian,
|
|
BigEndian,
|
|
}
|
|
|
|
macro_rules! unpack_num {
|
|
($type:ty, $endian:expr, $input:expr) => {
|
|
match $endian {
|
|
Endian::LittleEndian => <$type>::from_le_bytes($input.try_into().unwrap()),
|
|
Endian::BigEndian => <$type>::from_be_bytes($input.try_into().unwrap()),
|
|
Endian::NativeEndian => <$type>::from_ne_bytes($input.try_into().unwrap()),
|
|
}
|
|
};
|
|
}
|
|
|
|
pub fn unpack_h(endian: Endian, input: &[u8]) -> i16 {
|
|
unpack_num!(i16, endian, input)
|
|
}
|
|
|
|
pub fn unpack_H(endian: Endian, input: &[u8]) -> u16 {
|
|
unpack_num!(u16, endian, input)
|
|
}
|
|
|
|
pub fn unpack_l(endian: Endian, input: &[u8]) -> i32 {
|
|
unpack_num!(i32, endian, input)
|
|
}
|
|
|
|
pub fn unpack_L(endian: Endian, input: &[u8]) -> u32 {
|
|
unpack_num!(u32, endian, input)
|
|
}
|