为什么ToBase64String将16字节的字符串更改为24字节

问题描述

| 我有以下代码。当我检查变量i的值时,它是16个字节,但是当输出转换为Base64时,它是24个字节。
   byte[] bytOut = ms.GetBuffer();
        int i = 0;
        for (i = 0; i < bytOut.Length; i++)
            if (bytOut[i] == 0)
                break;

        // convert into Base64 so that the result can be used in xml

        return System.Convert.ToBase64String(bytOut,i);
这是预期的吗?我正在尝试减少存储量,这是我的问题之一。     

解决方法

        是的,您期望会有所扩展。您以64个字符为单位表示数据。但是,所有那些不可打印的ASCII字符仍然需要一种编码方式。因此,您最终会略微扩展数据。 以下是一个说明费用的链接:Base64:空间使用情况中最糟糕的增加是什么? 编辑:根据上面的评论,如果需要减小大小,则应在加密之前查看压缩数据。这将使您从压缩中获得最大收益。压缩加密的二进制文件不起作用。     ,        Base64使用64个人类可读字符(64个字符= 6位信息)表示由8位字节组成的输入字符串。 问题答案的关键是它以24位块为单位进行编码,因此,每24位或不足24位的部分将产生4个字符的输出。 16字节* 8位= 128位信息 128位/每块24位= 5.333个块 因此,最终输出将是6个块或24个字符。 分数块用等号处理,它们代表尾随的“空位”。在您的情况下,输出将始终以\'== \'结尾。     ,        这是因为在另一方面,base64字符串只能包含64个字符(这是因为它应该是可显示的),而byte具有各种256个字符,因此它可以包含更多信息。     ,        Base64是一种仅使用标准可打印字符表示字符串中的二进制数据的好方法。但是,这不是表示字符串数据的好方法,因为它比原始字符串需要更多的字符。