1pub fn encode(buf: &[u8], base: usize) -> usize {
5 let mut len = 0;
6 let mut block_size = 1;
7 for n in buf {
8 len *= base;
9 len += *n as usize;
10 }
11 for _ in buf {
12 len += block_size;
13 block_size *= base;
14 }
15 len
16}
17
18pub fn decode(mut l: usize, base: usize) -> Vec<u8> {
22 let mut binary_len = 0;
23 let mut block_size: usize = 1;
24 while l >= block_size {
25 l -= block_size;
26 binary_len += 1;
27 block_size *= base;
28 }
29
30 let mut result = vec![0; binary_len];
31 for n in (0..binary_len).rev() {
32 let b = l & (base - 1);
33 result[n] = b as u8;
34 l -= b;
35 l /= base;
36 }
37 result
38}
39
40#[cfg(test)]
41mod test {
42 #[test]
43 fn decode_encoded() {
44 assert_eq!("adasddf", String::from_utf8_lossy(::decode(::encode("adasddf".as_bytes(), 256), 256).as_slice()));
45 }
46 #[test]
47 fn correct_len() {
48 assert_eq!(27696021251646823, ::encode("adasddf".as_bytes(), 256));
49 }
50}