代码之家  ›  专栏  ›  技术社区  ›  Alex

C方法,如base64string,但仅限于字母数字(无加号或斜线)

  •  11
  • Alex  · 技术社区  · 16 年前

    是否有任何与convert.tobase64string类似但除了字母数字输出外不生成任何内容的c方法?

    谢谢!

    6 回复  |  直到 9 年前
        1
  •  12
  •   Community CDub    8 年前

    您可能会看到使用类似base32编码的方法。C有一个base32编码器/解码器# here 迈克尔·吉奥尼卡沃。它使用大写字母和数字的组合。

    还有一个关于stackoverflow的相关讨论 here .

    编辑: 如果这是与URL安全相关的base64编码,那么只需执行base64,并将“+”替换为“-”和“/”替换为“uu”。但我猜,你可能不想那样做。

        2
  •  21
  •   Mason G. Zhwiti    12 年前

    答案现在有点过时了。为了未来搜索者的利益:现在用C语言处理这一问题的最佳方法是:

    byte[] b; // fill your byte array somehow
    string s = System.Web.HttpServerUtility.UrlTokenEncode(b);
    

    这将返回一个base64编码的字符串,该字符串是URL安全的(这是您在对问题的注释中所说的您真正需要的)。

    然后,您可以使用,您猜到的方法再次对其进行解码:

    byte[] b = System.Web.HttpServerUtility.UrlTokenDecode(s);
    
        3
  •  2
  •   TheVillageIdiot    16 年前

    如果可能,可以用一些预定义的字符串替换+或斜线。

        4
  •  2
  •   Marc Gravell    16 年前

    base-64的一个常见变体(用于查询字符串)是使用“-”和“”代替“+”和“/”。也许有点 Replace(...) 在每一端都能完成这项工作吗?

        5
  •  0
  •   sharptooth    16 年前

    您可以使用bitconverter.toString(),它将为您提供一个十六进制字符串。但是,结果字符串将长于base64编码。

        6
  •  0
  •   AFract    9 年前

    我在找一个这样的编码器 https://github.com/renmengye/base62-csharp/

    它是“0123456789abcdefghijklmnopqrstuvwxyzabbcdefghijklmnopqrstuvwxyz”字符空间范围内的编码器/解码器。

    我只是用

    System.Text.Encoding.UTF8.GetBytes(plainText); System.Text.Encoding.UTF8.GetString(decoded);

    调用以允许它轻松地使用字符串。

    推荐文章