azl397985856/fe-interview

【每日一题】- 2019-08-06 - base64 编码 会让源代码增加多少???

azl397985856 opened this issue · 5 comments

假如一个二进制文件大小是2M,经过base64编码之后,大小大概会增加多少?

2M的二进制文件一共有2097152个字节,而每个字节原本是由8个二进制来表示,base64编码是以6个二进制来表示一个字节,所以原始文件的3个字符就会转化成base64的4个字符,简单公式为3×8/6=4,如果原始文件的字节不是3的倍数,base64就会用0补全,所以,题目中的大小会增减2×8/6-2=0.667M

2M的二进制文件一共有2097152个字节,而每个字节原本是由8个二进制来表示,base64编码是以6个二进制来表示一个字节,所以原始文件的3个字符就会转化成base64的4个字符,简单公式为3×8/6=4,如果原始文件的字节不是3的倍数,base64就会用0补全,所以,题目中的大小会增减2×8/6-2=0.667M

”base64编码是以6个二进制来表示一个字节“ 这句话不对吧?

image
是不是应该这么表述,
这是引用https://juejin.im/post/5d206ab1f265da1bcb4f4d21#heading-2

image
是不是应该这么表述,
这是引用juejin.im/post/5d206ab1f265da1bcb4f4d21#heading-2

这个描述是对的。 你的描述是反的

1.base64编码规则:将一个3x8bit的二进制数据转换为4x6bit的二进制数据
例如:11111111,11111111,11111111 切割一下成:111111,111111,111111,111111
再转换为8位的二进制:00111111,00111111,00111111,00111111。
2.所以一个24位的二进制数据转换为了32的数据,增加了(32-24)/24=1/3的长度
所以2M的二进制文件,经过base64编码之后,大小会增加 (2x1024)/3=682.667byte
(由于最后两个8bit的不够编写成一个64位编码对应的 "A"~"/" 之间的字符,就在最后面一个字符为“=”,所以增加683byte)