11 个版本 (7 个稳定版)
1.2.1 | 2023 年 11 月 18 日 |
---|---|
1.1.2 | 2023 年 5 月 8 日 |
1.1.0 | 2021 年 2 月 1 日 |
1.0.1 | 2018 年 1 月 6 日 |
0.1.0 | 2017 年 5 月 24 日 |
#236 in 编码
每月 376 次下载
在 3 crates 中使用
17KB
266 行
crockford
64 位值的 Base32 编码。
Crockford Base32 编码最常用于使数字标识符稍微更易于用户识别。类似于Hashids,这里的目的是使标识符更短、更不令人困惑。与 Hashids 不同,Crockford Base32 在实际编码之外不做任何事情来隐藏数字的真实值,并且当你看到连续的标识符并排时,它们是顺序的这一点仍然相当明显。
这个库不支持任意数据的编码和解码;有一个另一个库用于此目的。此外,规范支持校验位数字的概念,但这个库目前不支持。
此库的主要目的是提供高性能、用户友好的数字标识符编码。为此,编码和解码实际上都相当快。有多快?根据我的测试,crockford
解码比harsh
快50倍,编码快27倍。
用法
编码
编码是一个单步过程。
let x = crockford::encode(5111);
assert_eq!("4ZQ", &*x);
如果你想使用小写,那么... 好吧,很抱歉。然而,我们现在支持将编码输出到您选择的缓冲区,而不是在函数中创建一个新的缓冲区。继续阅读以了解计划B...
计划B(更快的编码)
因为这是 Rust,我们特别关注运行时效率--或者至少,允许用户实现运行时效率。因此,我们提供了第二个更复杂的编码选项。
// The longest possible representation of u64 is 13 digits.
let mut buf = Vec::with_capacity(13);
crockford::encode_into(5111, &mut buf);
let result = std::str::from_utf8(&buf)?;
assert_eq!("4ZQ", result);
此 encode_into
方法也接受&mut String
,如果您愿意的话。
解码
解码是一个两步过程。这是因为你可以向解码器输入任何字符串,如果你试图让解码器相信 "Hello, world!"
是一个数字,解码器将会返回一个错误。(提示:它不是。)
let x = crockford::decode("4zq");
let y = crockford::decode("4ZQ");
assert_eq!(5111, x?);
assert_eq!(5111, y?);
因此,第一步是调用解码函数。第二步是匹配/验证/展开/丢弃输出。
许可证
根据您的要求,在以下任一许可证下发布:
- Apache许可证2.0版本(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交以包含在工作中的任何贡献,都将根据上述方式双许可,无需任何额外的条款或条件。