据我了解规范,Base64编码器
a)获取源二进制文件,并用零填充为24字节长的倍数。
然后它将它(一次六位)转码为64个字符的目标集(A..Z,a..z,0..9,+, - )。如果它发现最后两个字节(16位)已被零填充,则最后两个字符被转码为'=='。如果它发现最后一个字节(8位)已经填零,则最后一个字符将被转码为'='。我的问题是,在步骤(b)中,它是如何知道最后一个字节是零的,因为它们已被填充而它们是零,因为它们是有效二进制源数据的一部分?
负责(b)部分的子系统是否必须知道在(a)部分发生了什么
答案 0 :(得分:3)
编码器(与解码器相对)将知道输入数据的长度,并能够确定是否在末尾输出“=”或“==”。你的问题假设你提到的两个阶段之间没有联系,但在我看到的实现中却不是这样。
我必须写的实现根本没有完成第一阶段,因为它有一个例程一次一个地从输入流中提取6位组,每次递增byteCount。然后在结尾处,使用表达式“byteCount%3
”来决定要附加到输出流的字符串。