intbin/
lib.rs

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}