为了账号安全,请及时绑定邮箱和手机立即绑定

Base64长度计算?

/ 猿问

Base64长度计算?

拉丁的传说 2019-11-25 15:40:50

阅读base64 Wiki之后 ...


我试图弄清楚该公式如何工作:


给定一个长度为的字符串n,base64的长度将为在此处输入图片说明


这是: 4*Math.Ceiling(((double)s.Length/3)))


我已经知道base64的长度必须%4==0允许解码器知道原始文本的长度。


序列的最大填充数可以是=或==。


Wiki:每个输入字节的输出字节数约为4/3(33%的开销)


题:


上面的信息如何与输出长度相符 在此处输入图片说明?


查看完整描述

3 回答

?
qq_遁去的一_1

每个字符用于表示6位(log2(64) = 6)。

因此,使用4个字符来表示4 * 6 = 24 bits = 3 bytes

因此,您需要使用4*(n/3)char来表示n字节,这需要四舍五入为4的倍数。

由于四舍五入到4的倍数而产生的未使用的填充字符数显然将为0、1、2或3。


查看完整回答
反对 回复 2019-11-25
?
倚天杖

4 * n / 3 给出未填充的长度。


将四舍五入到最接近的4的倍数进行填充,由于4是2的幂,因此可以使用按位逻辑运算。


((4 * n / 3) + 3) & ~3


查看完整回答
反对 回复 2019-11-25
?
慕标5265247

作为参考,Base64编码器的长度公式如下:

//img1.sycdn.imooc.com/5ddb85ab0001ae0d02990073.jpg

如您所说,给定n字节数据的Base64编码器将产生一串4n/3Base64字符。换句话说,每3个字节的数据将产生4个Base64字符。编辑正确的注释指出,我以前的图形未考虑填充;正确的公式是 Ceiling(4n/3)

Wikipedia文章在其示例中准确显示了如何将ASCII字符串Man 编码为Base64字符串TWFu。输入字符串的大小为3个字节或24位,因此该公式正确地预测了输出将为4个字节(或32位)长:TWFu。该过程将每6位数据编码为64个Base64字符之一,因此,将24位输入除以6将得到4个Base64字符。

您在评论中询问编码的大小123456。请记住,该字符串的每个字符的大小均为1个字节或8位(假设ASCII / UTF8编码),我们正在编码6个字节或48位的数据。根据等式,我们期望输出长度为(6 bytes / 3 bytes) * 4 characters = 8 characters

123456为Base64编码器创建MTIzNDU2,这是8个字符长,正如我们的预期。


查看完整回答
反对 回复 2019-11-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信