r36/
lib.rs

1use num_traits::PrimInt;
2
3pub fn e<T: PrimInt>(mut value: T) -> String {
4  if value == T::zero() {
5    return "0".to_string();
6  }
7
8  let radix = T::from(36).unwrap();
9  let mut result = String::new();
10
11  while value > T::zero() {
12    let remainder = value % radix;
13    let digit = remainder.to_u8().unwrap();
14
15    let c = match digit {
16      0..=9 => (b'0' + digit) as char,
17      10..=35 => (b'A' + (digit - 10)) as char,
18      _ => unreachable!(),
19    };
20
21    result.push(c);
22    value = value / radix;
23  }
24
25  // 反转字符串,因为我们是从最低位开始构建的
26  result.chars().rev().collect()
27}