C# 以36个字母的格式显示GUID

C# 以36个字母的格式显示GUID,c#,.net,guid,base64,C#,.net,Guid,Base64,是大随机数显示在一个基础上。我想用一种更短的格式显示这个数字,比如说基于所有字母和数字。这是36个基点 假设:2f1e4fc0-81fd-11da-9156-00036a0f876a将变为3jEl9x6eZi 在.Net中是否有任何“就绪”算法 它需要是双向的 编辑:使用是更好的解决方案。唯一的问题是Base64包含与中使用不兼容的/字符。Base64是我使用的,它将用==和/和+解决问题。正如您介绍的那样,这是不可能的。您将不得不丢失信息: >>> 16 ** len('2f

是大随机数显示在一个基础上。我想用一种更短的格式显示这个数字,比如说基于所有字母和数字。这是36个基点

假设:
2f1e4fc0-81fd-11da-9156-00036a0f876a
将变为
3jEl9x6eZi

在.Net中是否有任何“就绪”算法

它需要是双向的


编辑:使用是更好的解决方案。唯一的问题是Base64包含与中使用不兼容的
/
字符。

Base64是我使用的,它将用==和/和+

解决问题。正如您介绍的那样,这是不可能的。您将不得不丢失信息:

>>> 16 ** len('2f1e4fc081fd11da915600036a0f876a')
340282366920938463463374607431768211456
>>> 36 ** len('3jEl9x6eZi')
3656158440062976

你需要更多的36位数来覆盖所有可能的值。为什么不直接使用base64呢?结果会更短(我假设这是本文的目标),并且在.NET中有一个标准的解决方案。

我认为您会发现最接近的解决方案是,它不适用于GIUD类型(仅适用于Int16、Int32或Int64)。

这种转换没有内置功能。内置的一些相近的东西正在使用base 64编码:

string base64 = Convert.ToBase64String(theGuid.ToByteArray())

可能这就是您需要的:

3jEl9x6eZi
只是一个示例,它不是“真实”值。对于base 64,您可以用有效(但尚未使用)字符替换无效字符。IIRC,可打印的ASCII字符略少于96个。请看我的答案,看看我是如何修复==、/和+IssueGod解决方案的。但是为什么每个字符串都以“==”结尾呢
=
在Base64格式中,它不是一个有效的值。@Mendy:The=字符用于填充最后一个字符组。(这在RFC 1421标准中有规定。)