问题描述
|
我有以下代码。当我检查变量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是一种仅使用标准可打印字符表示字符串中的二进制数据的好方法。但是,这不是表示字符串数据的好方法,因为它比原始字符串需要更多的字符。