当前位置: 首页 > 知识库问答 >
问题:

我如何使用大写字母和数字来编码一个长数字,以使它更短的键入?

文英达
2023-03-14

共有1个答案

洪高阳
2023-03-14

Base32编码的设计是为了产生一个明确,紧凑,人类可读(和非淫秽!)代表权。来自维基百科:

Base32与Base64相比有许多优点:

>

  • 得到的字符集都是一个大小写,当使用不区分大小写的文件系统、口语或人类记忆时,这通常是有益的。

    Base32与十六进制/Base16相比也有优势:Base32表示法占用的空间大约少20%。(1000位需要200个字符,而Base16需要250个字符)

    Douglas Crockford关于Base32编码的原创文章也很值得一读。

    编辑:这里有一些C#可以对整数进行base-N编码:

    class Program {
        private const string BINARY = "01";
        private const string DECIMAL = "0123456789";
        private const string HEX = "0123456789abcdef";
        private const string BASE32 = "0123456789abcdefghjkmnpqrstvwxyz";
    
        static string EncodeInt32(string alphabet, int value) {
            var sb = new StringBuilder();
            while (value > 0) {
                sb.Insert(0, alphabet[value % alphabet.Length]);
                value = value / alphabet.Length;
            }
            return sb.ToString();
        }
    
        static int DecodeInt32(string alphabet, string value) {
            int result = 0;
            int b = alphabet.Length;
            int pow = 0;
            for (var i = value.Length-1; i >= 0; i--) {
                result += (int)(Math.Pow(b, pow++)) * alphabet.IndexOf(value[i]);
            }
            return (result);
        }
    
        static void Main(string[] args) {
            for (var i = 0; i < 1234567890; i += 1234567) { 
                Console.WriteLine("{0} {1} {2}", i, EncodeInt32(BASE32, i), DecodeInt32(BASE32, EncodeInt32(BASE32, i))); 
            }
            Console.ReadKey(false);
        }
    }
    
    1227159598 14j9y1e 1227159598
    1228394165 14kfknn 1228394165
    1229628732 14mn99w 1229628732
    1230863299 14ntyy3 1230863299
    1232097866 14q0mja 1232097866
    1233332433 14r6a6h 1233332433
    1234567000 14sbztr 1234567000
    

  •  类似资料: