使用整数编码短字符串

Using integers to encode short strings

假设我仅限于使用 32 位无符号整数来表示字符串。显然,我可以使用单独的 u8 数字并分配足够多的单独值来描述一个短字符串,但说计算和时间并不重要,这是出于我的好奇心,不一定用于现实世界。

我观察到一个 32 位数字与 4 个严格的 u8 字符大小相同。在十进制中,有 space 来编码任何字符编码中的 4 个,这些字符编码可以由 2 位小数作为它们的十进制等价物索引,而 5 个 ECMA-1 字符可以适合相同的位大小。

假设我想要 printable 字符的范围,使用映射的 ASCII table,我减去 32 将 printable 字符转换为 2 个十进制数字(32 到126 变为 0 到 94)。假设一个类似于|c,i|c-31*(10^((i+1)*2))的映射函数,其中c是ASCII值,i是位置:45769502。在ASCII值中作为u8数组[66, 97, 116, 33],或字符串“Bat!”

显然这在计算上效率不高。我不一定为此拍摄?纯属好奇。

假设计算是任意的,所以即使是完全荒谬的,我如何将更长的字符串编码为 32 位无符号整数?

首先您需要决定要对哪些字符进行编码。假设您选择了 k 个字符,这些字符已映射到数字 0 到 k-1。然后通过在基数 k 中表达 n 并将每个 k 进制数字映射到相应的字符,将每个整数 n 映射到唯一的非空字符串。您可以为空字符串保留最大整数。

所以你只需要 k 个字符的映射 table 和一个 function to convert 从一个基数到另一个基数的整数,这简单高效,编码也最佳密集(因为每个整数都映射到一个唯一的字符串)。