#string-representation #ascii #numbers #ascii-text #codec #parser

ascii_basing

提供创建整数的 62 进制(ASCII)字符串表示的函数

1 个不稳定版本

0.1.0 2024 年 6 月 27 日

#1068编码

每月 25 次下载
structurray 中使用

Apache-2.0

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,而在大多数其他情况下使用此库。

无运行时依赖