我需要将Int32
转换为必须在网络表单上输入的代码。为了让访问者保持简单,这段代码需要尽可能简单和简短。
是否有人知道使用[0-9]和[A-Z]将Int32
转换为最短字符串表示的良好算法?
答案 0 :(得分:6)
base 36表示是您想要的。这使用字母和数字符号来编码数字,用于非常紧凑的表示。
答案 1 :(得分:6)
你可以编码到base-36,但是对于每个人的理智(尤其是你的用户,处理I vs 1,O vs 0等),我建议只是坚持使用hex;加上它内置于:
int value = 22334;
string hex = Convert.ToString(value, 16); // 573e
value = Convert.ToInt32(hex, 16);
答案 2 :(得分:1)
举个例子,我没有查看所有细节。
给出32位int:
将其拆分为8x4位
4位阵列给出2 ^ 4 = 16种可能的组合
然后将4位的每个文字值与从小写字母A或其他任何内容开始的ascii字符代码进行匹配。
答案 3 :(得分:0)
string s = code.ToString();
答案 4 :(得分:0)
您可以使用Encoding类来获取字符串:
int value = 1234;
string intString = Encoding.Default.GetString(BitConverter.GetBytes(value));
您可以选择自己想要的默认编码,而不是默认编码。
答案 5 :(得分:0)
您有几个选择:
你遇到的一个基本问题是你做得越短,就越难以正确记住。因此,您需要考虑是否要将其用于复制/粘贴或让人们记住。
对于复制/粘贴,我可能会使用对齐的base64,以避免结尾处的等号(但您可以将=更改为_并在服务器上转换回来。)
对于人类可读的,建议完全做其他事情。