我有以下代码。当我检查变量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);
这是预期的吗?我正在努力减少存储空间,这是我的一个问题。
答案 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是一种使用标准的可打印字符在字符串中表示二进制数据的好方法。但是,它不是表示字符串数据的好方法,因为它比原始字符串需要更多的字符。