【问题标题】:Convert a string into BASE62将字符串转换为 BASE62
【发布时间】:2023-04-08 23:51:01
【问题描述】:

我正在寻找将字符串转换为 BASE62 的 c# 代码,如下所示:

http://www.molengo.com/base62/title/base62-encoder-decoder

我需要那些用于 URL 编码的编码和解码方法。

【问题讨论】:

    标签: c# type-conversion base62


    【解决方案1】:

    BINARY to TEXT 编码方案的背景:

    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库,看看:

    如果您的源数据包含在“字符串”中,那么您首先需要将“字符串”转换为合适的字节数组。

    但要小心,使用正确的字符串到字节转换调用......因为您可能希望字节是 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"
    【解决方案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;
    }
    

    【讨论】:

    • 这是用于将 ulong 转换为 base62,而不是字符串(在问题中提出)。
    • 这是不正确的,字符串应该是“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz”而不是“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”
    【解决方案3】:

    不是真正的答案,但希望这可以帮助您构建它的 C# 版本:

    Javascript Base62 编码/解码:

    http://x443.wordpress.com/2012/03/18/javascript-base62-encode-decode/

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2019-01-05
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多