1

据我了解规范,Base64 编码器

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

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

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

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

4

1 回答 1

3

编码器(与解码器相反)将知道输入数据的长度,并能够确定是否不输出任何内容,最后是“=”还是“==”。您的问题假设您提到的两个阶段之间没有联系,但在我看到的实现中并非如此。

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

于 2008-10-29T12:53:52.930 回答