据我了解规范,Base64编码器

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

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

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

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

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top