如何将2个Guid转换为最大50个字符长度的字符串(双向转换)
本文关键字:转换 字符串 字符 50个 2个 Guid | 更新日期: 2023-09-27 18:28:01
有一个有趣的问题——我需要将2个(随机)生成的Guid转换为一个字符串。以下是限制条件:
- 字符串最大50个字符的长度
- 只能使用数字和小写字母(0123456789bcdefghijklmnopqrstuvxyz)
- 算法必须是双向的-需要能够将编码的字符串解码为相同的2个单独的guid
我浏览了很多寻找toBase36转换bo到目前为止没有运气与Guid。
有什么想法吗?(C#)
首先,你很幸运,36^50大约是2^258.5,所以你可以将信息存储在一个50字节的36字符串中。不过,我想知道,为什么任何人都必须使用36垒。
您需要将每个GUID视为128位数字,然后将它们组合成256位数字,再将其转换为以36为基数的"数字"。转换回来就是反过来做同样的事情。
CCD_ 1将GUID转换为16字节的数组。对两个GUID都这样做,就会得到一个32字节(即256位)的数组。从该数组中构造一个BigInt
(有一个构造函数),然后将该数字转换为36。
要将一个数字转换为36进制,请执行以下操作(我假设一切都是正的)
const string digits = "0123456789abcdefghijklmnopqrstuvwxyz";
string ConvertToBase36(BigInt number)
{
string result = "";
while(number > 0)
{
char digit = string[number % 36];
result += digit;
number /= 36;
}
}