number2name (Rust library)
This is a simple Rust library to convert an index to a name that is as short as possible.
It can convert from index to string and back, for different character sets.
Example
From number to text:
let charset = Charset::case_insensitive("abc");
let text = charset.encode(13);
assert_eq!(text, "aab");
From text to number:
let nr = charset.decode("aab")?;
assert_eq!(nr, 13);
Install
Cargo.toml:
number2name = "^1.0.0"
Encoding
For a character set 'abc', the series is::
0 a
1 b
2 c
3 aa
4 ab
...
10 cb
11 cc
12 aaa
13 aab
Note that this is slightly shorter than base3 with leading characters stripped::
0 a (or '')
1 b
2 c
3 ba
4 bb
...
11 bac
12 bba
13 bbb
14 bbc
Character sets
You can easily use your own character sets using number2name::Charset.
Or use one of the built-in ones:
-
HEX (case-insensitive) / HEXLOWERCASE (case-sensitive)
0123456789abcdef
-
BASE32 (case-insensitive) / BASE32LOWERCASE (case-sensitive)
ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
-
BASE32HUMAN
abcdefghjkmnpqrstuvwxyz23456789
-
BASE32CROCKFORD
0123456789ABCDEFGHJKMNPQRSTVWXYZ
-
BASE32SCNY
一二三四五六七八九十鼠牛虎兔龍蛇马羊猴鸡狗猪凤北东南西中左右上下
-
BASE32HEX
0123456789ABCDEFGHIJKLMNOPQRSTUV
-
BASE64 (case-sensitive)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
-
BASE64URL (case-sensitive)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
Notes
-
It's generally pretty fast, but if performance is critical:
- Re-use the Charset instances (automatic for built-in ones)
- Use case-sensitive character sets where possible