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

#![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)
}