generated from PlexSheep/baserepo
feat/bintols/split-numbers-to-bytes #77
|
@ -3,25 +3,20 @@
|
|||
//! Sometimes, you need a large integer in the form of many bytes, so split into [u8].
|
||||
//! Rust provides
|
||||
|
||||
use num_traits::Unsigned;
|
||||
|
||||
/// split an integer into it's bytes, ignoring those bytes that would be all zero.
|
||||
///
|
||||
/// If the integer is zero, the Vec contains a single null byte.
|
||||
pub fn unsigned_to_vec<T>(mut num: T) -> Vec<u8>
|
||||
pub fn unsigned_to_vec<T>(num: T) -> Vec<u8>
|
||||
where
|
||||
T: Unsigned,
|
||||
T: std::ops::ShrAssign<i32>,
|
||||
T: std::cmp::PartialOrd<i32>,
|
||||
u8: std::convert::From<T>,
|
||||
T: Copy,
|
||||
u128: std::convert::From<T>
|
||||
{
|
||||
let mut num: u128 = num.into();
|
||||
if num == 0 {
|
||||
return vec![0];
|
||||
}
|
||||
let mut buf: Vec<u8> = Vec::new();
|
||||
while num > 0 {
|
||||
buf.push(num.into());
|
||||
buf.push(num as u8);
|
||||
num >>= 8;
|
||||
}
|
||||
buf
|
||||
|
|
Reference in New Issue