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

时间:2011-06-15 14:38:56

标签: base64

我有以下代码。当我检查变量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, 0, i);

这是预期的吗?我正在努力减少存储空间,这是我的一个问题。

4 个答案:

答案 0 :(得分:2)

是的,你希望看到一些扩张。您在仅包含64个字符的基础中表示数据。所有那些不可打印的ASCII字符仍然需要一种方法进行编码。所以你最终会略微扩展数据。

以下链接解释了多少:Base64: What is the worst possible increase in space usage?

编辑:根据您上面的评论,如果您需要缩小尺寸,您应该在加密前查看压缩数据。这将为您带来压缩的最大好处。压缩加密的二进制文件不起作用。

答案 1 :(得分:2)

Base64使用64个人类可读字符(64个字符= 6位信息)表示由8位字节组成的输入字符串。

你的问题的答案的关键是它的编码工作在24位块,所以每24位或其中的一小部分产生4个字符的输出。

16字节* 8位= 128位信息

每块128位/ 24位= 5.333块

所以最终输出将是6个块或24个字符。

小数块用等号处理,它们代表尾随的“空位”。在您的情况下,输出将始终以'=='结尾。

答案 2 :(得分:0)

这是因为base64字符串只能包含64个字符(这是因为它应该是可显示的),而另一方面字节有256个字符,因此它可以包含更多信息。

答案 3 :(得分:0)

Base64是一种使用标准的可打印字符在字符串中表示二进制数据的好方法。但是,它不是表示字符串数据的好方法,因为它比原始字符串需要更多的字符。