首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ToBase64String会将16字节的字符串更改为24字节

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

Stack Overflow用户
提问于 2011-06-15 22:38:56
回答 4查看 10.1K关注 0票数 4

我有以下代码。当我检查变量i的值时,它是16个字节,但是当输出转换为Base64时,它是24个字节。

代码语言:javascript
复制
   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);

这是意料之中的吗?我正在努力减少存储空间,这是我的问题之一。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-15 22:43:28

是的,你会期望看到一些扩展。您在一个只有64个字符的库中表示您的数据。但是,所有这些无法打印的ASCII字符仍然需要一种编码方式。因此,你最终会得到数据的轻微扩展。

这里有一个链接解释了这一点:Base64: What is the worst possible increase in space usage?

编辑:基于你上面的评论,如果你需要减小大小,你应该在加密之前考虑压缩数据。这将使您从压缩中获得最大的好处。压缩加密的二进制文件不起作用。

票数 2
EN

Stack Overflow用户

发布于 2013-10-26 06:08:04

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

回答你的问题的关键是它是以24位的块进行编码的,所以每24位或每24位的分数就会产生4个字符的输出。

16字节*8位= 128位信息

128位/每块24位= 5.333块

因此,最终输出将是6个块或24个字符。

分数块用等号来处理,等号表示尾随的“空位”。在您的示例中,输出将始终以'==‘结束。

票数 5
EN

Stack Overflow用户

发布于 2011-06-15 22:44:12

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6359493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档