1 个不稳定版本
0.1.0 | 2024 年 6 月 27 日 |
---|
#1068 在 编码
每月 25 次下载
在 structurray 中使用
20KB
153 行
ascii_basing
一个 Rust 库,可以将无符号 32 位整数(u32
)转换为唯一的 String
值,该值始终小于或等于给定整数的 10 进制表示,并且可以在编码前解码回精确值。ascii_basing
使用标准库函数实现 Base62 编码和解码算法。有关如何使用此包的更多信息,请参阅文档。
lib.rs
:
Base62 转换器 & 解码器
将您的正整数转换为 整数 的 ASCII 安全 String
,用于需要简洁 String
表示整数的情况,例如在自动生成文件名或标识符时。
每个可能的整数值都分配了一个唯一的 String
表示形式,允许在 String
和 [u32
] 之间进行无损转换。每个 String
表示形式中的额外字符可以视为 Base62 系统中的另一个数字。Base62 系统与 十六进制 系统类似,但使用 62 个数字而不是 16 个数字。以下是此库使用的所有 62 个数字的列表,按从小到大的顺序排列
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
由于整数的 String
表示基于 Base62,较小的值有更短的表示,但是由于每个数字可以表示的值非常多,因此表示(例如 32位整数)的长度永远不会超过6个字符。
示例
以下是一个快速示例,我们将使用来自 encoding
模块的 encode
函数对值进行编码,然后使用来自 decoding
模块的 decode
函数进行解码,如下所示
let number: u32 = 52 * 62 * 62 + 9 * 62 + 35; // = 200481
let representation = encoding::encode(number,Some(3)).unwrap();
assert_eq!(String::from("Q9z"),representation);
assert_eq!(number,decoding::decode(representation.chars()).unwrap());
替代方案
此库生成的输出类似于 base-62,但实现方式不同。目前此库的主要优势是将 0
编码为字符串 "0"
而不是空字符串,并允许用户给出有关编码值大小的 Option
建议(这些建议用于预分配字符串容量)。base-62 的优势在于允许以 &[u8]
格式对无符号整数进行编码和解码,而不仅仅是 u32 格式。
一般来说,当需要编码大数字或字节序列时,最好使用 base-62,而在大多数其他情况下使用此库。