c# - 如何在C#(3.5框架)中编码和解码Base128字符串

标签 c# .net c#-4.0 base64

我正在从事与安全相关的项目,目前我在该项目中将数据转换为 base64 格式。但是转换后的 base64 数据的大小更大,为此我想将数据转换为 base128 格式。如何编码和解码数据在 c# 中使用 base128 字符串格式?

最佳答案

如果可以避免,我强烈建议不要使用 Base128 编码。 7 位字母表必须包含不可打印的 ASCII 控制字符(代码点 0x20 以下只有 94 个可打印字符)。如果您尝试向它们提供此类数据,许多系统将会崩溃。为额外的位而节省的少量空间似乎真的不值得。 ASCII85Base91 之类的东西可以满足您的需求而不会让人头疼。请参阅关于类似问题的这篇 SO 帖子。

但是,如果您坚持不懈,那么您应该能够修改以下映射字符串以获得您需要的内容。 (注意:对于要添加到映射中的字符,您必须使用正确的不可打印代码,例如“\x09”):

public static string GetStringFromByteArray(byte[] data)
        {
            string mapping = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvqwxyz!#$%&()*+-;<=>?@^_`{|}~',./:[]\\\"";

            BigInteger base10 = new BigInteger(data);
            string baseX;
          int base=mapping.Length;
            var result = new Stack<char>();

            do
            {
                result.Push(mapping[(int)(base10 % base)]);
                base10 /= base;

            } while (base10 != 0);

            baseX = new string(result.ToArray());

            return baseX;
        }

关于c# - 如何在C#(3.5框架)中编码和解码Base128字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16931648/

相关文章:

c# - Winforms清除位图图像?

.net - SpecFlow - 您如何正确使用功能文件中的 "Background:"命令?

C#并行编程修改xDocument

java - 使用 Web 服务在 Java 中调用 C#.Net 函数

c# - ServiceStack 请求体

c# - 在 C# WinForms 中,我如何分配一个 labeltext 几秒钟然后再次删除它,而不中断其他代码的执行?

c# - Office 365 的 OAuth2 身份验证请求流程将链接转发到 https ://login. microsoftonline.com/login.srf

.net - 什么是 VB6 的 .NET Short?

c# - 使用 LINQ 仅从表中获取所需的列以修改和保存记录会出现典型错误

c#-4.0 - NHIBERNATE WHERE 和 IQUERYOVER 的多个 OR 子句