代码之家  ›  专栏  ›  技术社区  ›  Vihung

base 64如何处理结尾为零的二进制数据

  •  1
  • Vihung  · 技术社区  · 17 年前

    据我所知,一个base64编码器

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

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

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

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

    1 回复  |  直到 12 年前
        1
  •  3
  •   paxdiablo    17 年前

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

    我必须执行的任务 根本没有做第一步,因为它有一些例程从输入流中提取6位组,一次一个,每次递增字节数。然后在最后,表达式“ byteCount%3 “用于决定要附加到输出流的字符串。

    推荐文章