有一个有趣的问题 - 我需要将2个(随机)生成的Guids转换为字符串。以下是约束条件:
到目前为止,我已经浏览了很多寻找到底池36的转换,并且没有运气。
有什么想法吗? (C#)
答案 0 :(得分:9)
首先,你很幸运,36 ^ 50大约是2 ^ 258.5,所以你可以将信息存储在一个50字节的base-36字符串中。不过,我想知道为什么有人会为此使用base-36。
您需要将每个GUID视为128位数字,然后将它们组合成一个256位数字,然后您将转换为基数为36的数字。转回也是相反的。
Guid.ToByteArray
会将GUID转换为16字节数组。为两个GUID执行此操作,并且您有一个32字节(256位)数组。从该数组构造一个BigInt
(有一个构造函数),然后将该数字转换为base-36。
要将数字转换为base-36,请执行以下操作(我假设一切都是正面的)
const string digits = "0123456789abcdefghijklmnopqrstuvwxyz";
string ConvertToBase36(BigInt number)
{
string result = "";
while(number > 0)
{
char digit = string[number % 36];
result += digit;
number /= 36;
}
}