加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何将2个Guids转换为最多50个字符长度的字符串(2路转换)

发布时间:2020-12-15 04:26:23 所属栏目:百科 来源:网络整理
导读:有一个有趣的问题 – 我需要将2个(随机)生成的Guid转换为字符串.以下是约束: 字符串最多50个字符长度. 只能使用数字和小写字母(0123456789abcdefghijklmnopqrstuvwxyz) 算法必须是2路 – 需要能够将编码的字符串解码为相同的2个单独的guid. 到目前为止,我已
有一个有趣的问题 – 我需要将2个(随机)生成的Guid转换为字符串.以下是约束:

>字符串最多50个字符长度.
>只能使用数字和小写字母(0123456789abcdefghijklmnopqrstuvwxyz)
>算法必须是2路 – 需要能够将编码的字符串解码为相同的2个单独的guid.

到目前为止,我已经浏览了很多寻找到底池36的转换,但是Guid没有运气.

有任何想法吗? (C#)

解决方法

首先,你很幸运,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;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读