2011-06-22 135 views
1

我有一個數據流,即時嘗試使用UUencode進行編碼,以便將數據傳遞到外部芯片。該芯片一次接受512字節的原始數據。我用UUencode編碼512個字節。UUencode校驗和錯誤

據我所知,數據應該被轉換成45個字節(編碼後將是60個字節)的11行和剩下的1行17個字節。

顯然,17字節不能直接映射到uuencoded段,因爲它不是3的倍數,但是當我得到uuencoded數據時,最後一行返回24個編碼字節(或18個原始字節)。

這意味着我現在總共有513個字節的數據。我的問題是,這是我的uuencode算法的錯誤(儘管從純粹的數學角度來看,我看不出它是怎麼回事),或者額外的字節從哪裏來,又如何擺脫它呢?

+0

UUEncoding?多麼古怪。 base64有什麼問題,你爲什麼要實現自己的? –

回答

7

UUEncoding 512字節將爲您提供684個編碼字節(不是513)。長度爲384字節的輸入數據流將編碼爲恰好512字節。

UUEncoding只是一種將3個二進制字節輸入數據段轉換爲4個文本字節輸出數據段的方法。任何不是3字節長的輸入段都將填充空字節,直到它爲止。 UUEncoding算法沒有表示原始數據長度。

將此與UUEncoded文件進行對比,UUEncoded文件通過將數據流分解爲特定長度的行並在每條編碼數據行的前面添加行長度指示符來格式化和添加信息到數據流。在你的例子中,你的17個最終字節會被編碼爲24個字節,但是這行數據之前會有一個字節,這個字節的長度爲17而不是18個。

唯一能擺脫填充是通過編碼數據的長度來首先知道它的存在。