我有以下代码。当我检查变量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);这是意料之中的吗?我正在努力减少存储空间,这是我的问题之一。
发布于 2011-06-15 22:43:28
是的,你会期望看到一些扩展。您在一个只有64个字符的库中表示您的数据。但是,所有这些无法打印的ASCII字符仍然需要一种编码方式。因此,你最终会得到数据的轻微扩展。
这里有一个链接解释了这一点:Base64: What is the worst possible increase in space usage?
编辑:基于你上面的评论,如果你需要减小大小,你应该在加密之前考虑压缩数据。这将使您从压缩中获得最大的好处。压缩加密的二进制文件不起作用。
发布于 2013-10-26 06:08:04
Base64使用64个人类可读的字符来表示由8位字节组成的输入字符串(64个字符=6位信息)。
回答你的问题的关键是它是以24位的块进行编码的,所以每24位或每24位的分数就会产生4个字符的输出。
16字节*8位= 128位信息
128位/每块24位= 5.333块
因此,最终输出将是6个块或24个字符。
分数块用等号来处理,等号表示尾随的“空位”。在您的示例中,输出将始终以'==‘结束。
发布于 2011-06-15 22:44:12
这是因为base64字符串只能包含64个字符(这是因为它应该是可显示的),而byte有各种256个字符,因此可以包含更多信息。
https://stackoverflow.com/questions/6359493
复制相似问题