1use std::borrow::Borrow;
2
3use num_traits::ops::bytes::ToBytes;
4
5pub fn bin_u64(bin: impl AsRef<[u8]>) -> u64 {
6 let bin = bin.as_ref();
7 let mut b = [0u8; 8];
8 b[..bin.len()].copy_from_slice(bin);
9 u64::from_le_bytes(b)
10}
11
12pub fn bin_u16(bin: impl AsRef<[u8]>) -> u16 {
13 let bin = bin.as_ref();
14 let mut b = [0u8; 2];
15 b[..bin.len()].copy_from_slice(bin);
16 u16::from_le_bytes(b)
17}
18
19pub fn to_bin(n: impl ToBytes) -> Box<[u8]> {
20 let n = n.to_le_bytes();
21 let n = n.borrow();
22 let mut i = n.len();
23 while i > 0 {
24 let p = i - 1;
25 if n[p] != 0 {
26 break;
27 }
28 i = p;
29 }
30 Box::from(&n[..i])
31}
32
33pub fn u8_bin(n: u8) -> Box<[u8]> {
34 if n == 0 {
35 return [].into();
36 }
37 [n].into()
38}
39
40pub fn bin_u8(bin: impl AsRef<[u8]>) -> u8 {
41 let bin = bin.as_ref();
42 if bin.is_empty() {
43 return 0;
44 };
45 bin[0]
46}