1

我有一个试图用 UUencode 编码的数据流,以便将数据传递到外部芯片。该芯片一次接受 512 字节的原始数据。我用 UUencode 编码 512 个字节。

据我了解,数据应转换为 11 行 45 字节(编码后为 60 字节)和剩余 1 行 17 字节。

显然 17 个字节不能直接映射到 uuencoded 段,因为它不是 3 的倍数,但是当我返回 uuencoded 数据时,最后一行返回 24 个编码字节(或 18 个原始字节)。

这意味着我现在总共有 513 个字节的数据。我的问题是,这是我的 uuencode 算法的错误(尽管从纯粹的数学角度来看,我看不出它是怎么回事),或者,额外的字节是从哪里来的,我该如何再次摆脱它?

4

1 回答 1

7

UUEncoding 512 bytes 将得到 684 个编码字节(不是 513)。长度为 384 字节的输入数据流将精确编码为 512 字节。

UUEncoding 只是一种将 3 个二进制字节输入数据段转换为 4 个文本字节输出数据段的方法。任何不是 3 字节长的输入段都用空字节填充,直到它是。UUEncoding 算法没有原始数据长度的表示。

将此与 UUEncoded 文件进行对比,UUEncoded 文件通过将流分成特定长度的行并在每个编码数据行的前面添加行长度指示符来格式化并向数据流添加信息。在您的示例中,您的 17 个最终字节将被编码为 24 个字节,但是这行数据的前面将有一个字节,该字节将行的长度设为 17 而不是 18。

摆脱填充的唯一方法是首先通过对数据长度进行编码来知道它的存在。

于 2011-06-22T15:57:20.697 回答