Base64如何在最后用零处理二进制数据

时间:2008-10-29 12:07:44

标签: encoding base64

据我了解规范,Base64编码器

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

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

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

负责(b)部分的子系统是否必须知道在(a)部分发生了什么

1 个答案:

答案 0 :(得分:3)

编码器(与解码器相对)将知道输入数据的长度,并能够确定是否在末尾输出“=”或“==”。你的问题假设你提到的两个阶段之间没有联系,但在我看到的实现中却不是这样。

我必须的实现根本没有完成第一阶段,因为它有一个例程一次一个地从输入流中提取6位组,每次递增byteCount。然后在结尾处,使用表达式“byteCount%3”来决定要附加到输出流的字符串。