Encoding Base64如何处理结尾为零的二进制数据

Encoding Base64如何处理结尾为零的二进制数据,encoding,base64,Encoding,Base64,据我所知,一个Base64编码器 a) 获取源二进制文件,并将其填充为24字节长的倍数 b) 然后它将其转码到64个字符的目标集(a..Z,a..Z,0..9,+,-)。如果发现最后两个字节(16位)已被零填充,则最后两个字符将被转码为“==”。如果发现最后一个字节(8位)已被零填充,则最后一个字符将被转码为“=” 我的问题是,在步骤(b)中,它如何知道最后的字节是零,因为它们被填充了,而它们是零,因为它们是有效的二进制源数据的一部分 负责第(b)部分的子系统必须知道在第(a)部分中发生了什么,

据我所知,一个Base64编码器

a) 获取源二进制文件,并将其填充为24字节长的倍数

b) 然后它将其转码到64个字符的目标集(a..Z,a..Z,0..9,+,-)。如果发现最后两个字节(16位)已被零填充,则最后两个字符将被转码为“==”。如果发现最后一个字节(8位)已被零填充,则最后一个字符将被转码为“=”

我的问题是,在步骤(b)中,它如何知道最后的字节是零,因为它们被填充了,而它们是零,因为它们是有效的二进制源数据的一部分

负责第(b)部分的子系统必须知道在第(a)部分中发生了什么,编码器(与解码器相反)将知道输入数据的长度,并且能够确定最后是什么也不输出,“=”还是“=”。您的问题假设您提到的两个阶段之间没有联系,但在我看到的实现中并非如此

我必须写的实现根本没有做第一步,因为它有从输入流中一次提取一个6位组的例程,每次增加字节数。然后在最后,使用表达式“
字节计数%3
”决定将哪个字符串附加到输出流