2011-06-22 6 views
1

データを外部チップに渡すために、UUencodeでエンコードしようとしているデータストリームがあります。このチップは512バイトの生データを一度に受け入れます。私はUUencodeで512バイトをエンコードします。UUencodeチェックサムエラー

私が理解する限り、データは11行の45バイト(エンコーディング後60バイトになります)と残りの1行の17バイトに変換される必要があります。

明らかに、17バイトは3の倍数ではないので、uuencodeされたセグメントに直接マップすることはできませんが、uuencodeされたデータを戻すと、最後の行は24個のエンコードされたバイト(または18個のrawバイト)を返します。

これは、合計513バイトのデータがあることを意味します。私の質問は、これは私のuuencodeアルゴリズム(純粋に数学的な観点から私はそれができる方法を参照してください)または代わりに、どこに余分なバイトが来て、そして私は再びそれを取り除くのですか?

+0

UUEncoding?どのように奇妙な。 base64の何が問題なのですか。なぜあなた自身で実装していますか? –

答えて

7

UUEncodingすると512バイトになります(513ではなく)。長さ384バイトの入力データストリームは、正確に512バイトにエンコードされます。

UUEncodingは、3バイナリバイト入力データセグメントを4テキストバイト出力データセグメントに変換する単なる手段です。 3バイトの長さでない入力セグメントは、それができるまでnullバイトで埋められます。 UUEncodingアルゴリズムは元のデータ長を表現しません。

これは、ストリームを特定の長さの行に分割し、行の長さインジケータを各エンコードされたデータ行の先頭に追加することによって、データストリームをフォーマットして情報を追加するUUEncodedファイルと対照的です。あなたの例では、最後の17バイトは24バイトにエンコードされますが、このデータラインの前には18の代わりに17のライン長を与えるバイトが続きます。

唯一の方法はパディングは、データの長さを符号化することによって最初にそこにあることを知ることです。

関連する問題