generated from PlexSheep/baserepo
feat/bintols/split-numbers-to-bytes #77
|
@ -25,3 +25,4 @@ pub const YOBI: u128 = 2u128.pow(80);
|
|||
// use libpt_core;
|
||||
pub mod datalayout;
|
||||
pub mod display;
|
||||
pub mod split_numbers;
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
//! # Split numbers into bits and bytes
|
||||
//!
|
||||
//! 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>
|
||||
where
|
||||
T: Unsigned,
|
||||
T: std::ops::ShrAssign<i32>,
|
||||
T: std::cmp::PartialOrd<i32>,
|
||||
u8: std::convert::From<T>,
|
||||
T: Copy,
|
||||
{
|
||||
if num == 0 {
|
||||
return vec![0];
|
||||
}
|
||||
let mut buf: Vec<u8> = Vec::new();
|
||||
while num > 0 {
|
||||
buf.push(num.into());
|
||||
num >>= 8;
|
||||
}
|
||||
buf
|
||||
}
|
Reference in New Issue