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;
|
// use libpt_core;
|
||||||
pub mod datalayout;
|
pub mod datalayout;
|
||||||
pub mod display;
|
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