将字符串转换为BASE62

6
3个回答

5

关于二进制到文本编码方案的背景:

https://en.wikipedia.org/wiki/Base62

https://en.wikipedia.org/wiki/Base64

BASE62编码方案的良好解释:

https://www.codeproject.com/Articles/1076295/Base-Encode

尝试使用此处提供的C#库,其中添加了一些扩展方法,使您可以将字节数组转换为BASE62(二进制到文本编码方案)并从中进行转换。
Github上有很多base62库,可以看一下:
- https://github.com/JoyMoe/Base62.Net - https://github.com/ghost1face/base62 - https://github.com/rossdempster/base62csharp - https://github.com/renmengye/base62-csharp(在下面声称不起作用...如果有问题,请与他们联系)
如果您的源数据包含在“字符串”中,则首先需要将其转换为适当的字节数组。

但要小心,使用正确的字符串转换为字节调用……因为您可能希望将字节作为ASCII字符或Unicode字节流等(例如:Encoding.GetBytes(text) 或 System.Text.ASCIIEncoding.ASCII.GetBytes(text); 等)

byte[] bytestoencode = ..... 

string encodedasBASE62 = bytestoencode.ToBase62();

.....

byte[] bytesdecoded = encodedasBASE62.FromBase62();

这个库不起作用。对于{255},它给出的结果是“z7”,而不是“47”。此外,在不该有影响的情况下,前导零非常重要,因此{0, 255}会得到另一个结果,即“0FF” 。 - Maxime Recuerda

2

您可以按照以下方式为任何基数进行操作:

static string ToBase62(ulong number)
{
var alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var n = number;
ulong basis = 62;
var ret = "";
while (n > 0)
 {
   ulong temp = n % basis;
   ret = alphabet[(int)temp] + ret;
   n = (n / basis);

 }
 return ret;
}

3
这是用于将ulong转换为base62,而不是字符串(这是问题中提出的)。 - Scott Lyons
1
这是不正确的,字符串应该是“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”,而不是“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”。 - confusednerd

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接