#base64 #byte-array #base32 #identifier #uuid #ids

fast32

Rust 中的 Base32 和 base64 编码。主要用于整数(u64, u128)和 UUID 标识符,以及任意字节序列。

3 个稳定版本

1.0.2 2023 年 12 月 27 日
1.0.1 2023 年 12 月 12 日
1.0.0 2023 年 12 月 11 日

#415 in 编码

Download history 340/week @ 2024-04-29 343/week @ 2024-05-06 305/week @ 2024-05-13 198/week @ 2024-05-20 94/week @ 2024-05-27 437/week @ 2024-06-03 388/week @ 2024-06-10 698/week @ 2024-06-17 845/week @ 2024-06-24 458/week @ 2024-07-01 573/week @ 2024-07-08 533/week @ 2024-07-15 662/week @ 2024-07-22 1016/week @ 2024-07-29 814/week @ 2024-08-05 480/week @ 2024-08-12

2,995 每月下载量
用于 10 个 crate (4 直接)

MIT 许可证

200KB
3.5K SLoC

fast32

Rust 中的 Base32 和 base64 编码。主要用于整数(u64, u128)和 UUID 标识符(在 uuid 功能之后),以及任意字节序列。并且做得非常快(更多内容请参见下面)。

crate 提供了安装说明,并且文档提供了丰富的示例。

整数编码

请注意,默认情况下,通过常规算法将整数编码为 base32 或 base64 不会“看起来”像数字——特别是最右侧的字符通常看起来不正常,有时字符数量比所需的还多。这可能对混淆有所帮助,但几乎微不足道,但它使它们难以快速理解,而且将它们作为整数而不是任意字节序列(因为我们事先知道整数始终是较小的尺寸)处理效率更高。

例如,将常规/十进制整数 31 正常处理,作为字节序列,转换为官方 RFC 4648 base32 十六进制,不带填充,将输出为 "D4"。相比之下,将其作为整数处理,就像这个库可以做到的那样,将输出为 "Z"(在 Crockford 的 base32 字母表中),这比 32 小一个,更直观(在 "10" 中),正如人们所希望的那样(与 base32 十六进制中的 "EA" 相比——注意那是一个 A 而不是一个 4,因此字符串在增加 1 的情况下非直观地发生了变化)。这对于标识符等 base32 编码的“看起来很好”的 URL 非常有帮助。

速度

这个库旨在尽可能快,同时保持直观的界面。

根据此存储库中的性能比较,在我的机器上,它解码u64的效率比最接近的替代方案快约65-100%以上,而编码u64的效率则快约15-50%以上,对于较大的数字,效率提升更为明显。(该存储库没有提供u128或uuid支持以进行比较。)

在解码和编码原始字节方面,它也比最接近的其他替代方案快约35-40%,该方案虽然更成熟,但没有提供此存储库的整数编码/解码功能,并且性能较慢。还有一个早期且似乎已被长期遗弃的替代方案,其速度通常比此存储库慢约3倍(因此也比其他替代方案慢约2倍),但仍然有一定的受欢迎程度。

总结

简而言之,此存储库应该能满足您对base32和base64编码的所有需求(如果不能满足,请提出问题!),同时执行速度快且方便。

依赖项