1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
pub trait FromU8{ fn from_u8(data: &[u8]) -> Self; } macro_rules! impl_from_u8_for_int { ($T: ty, $N: expr) => { impl FromU8 for $T { fn from_u8(data: &[u8]) -> $T { assert_eq!(data.len(), $N); let mut value: $T = 0; for i in 0..$N { value |= (data[i] as $T) << 8 * ($N - i - 1); } value } } }; } impl_from_u8_for_int!(u8, 1); impl_from_u8_for_int!(i8, 1); impl_from_u8_for_int!(u16, 2); impl_from_u8_for_int!(i16, 2); impl_from_u8_for_int!(u32, 4); impl_from_u8_for_int!(i32, 4); impl_from_u8_for_int!(u64, 8); impl_from_u8_for_int!(i64, 8); impl_from_u8_for_int!(u128, 16); impl_from_u8_for_int!(i128, 16);