2008-10-29 65 views
1

处理用零的二进制数据作为我明白规范,一个Base64编码器如何基础64在端

一个)开出源二进制,并用零垫判断出这是24个字节长的倍数。

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

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

难道这是负责的部分子系统(b)有权知道部分过程中发生了什么(一)

回答

3

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

执行我必须没有做第一阶段,因为它有一次从输入流中提取6位组,每次递增一个字节计数。然后最后,使用表达式“byteCount%3”来决定将哪个字符串附加到输出流。