在http協議中傳輸二進制的數據--base64實現

做Ministored的時候發現一個問題,用http傳輸二進制的數據時,需要將二進制做一下轉化,出現了以下的問題。

簡單概括如下:

1) 不知道傳輸字節的具體長度,如傳輸的int類型,將int類型之間轉爲char以後,丟失掉了長度的信息,如數字1234567,本來只有4個字節,但是轉化成文本的“1234567”是有7個字節。在int類型的時候固然好辦,但是一個數組的時候,經過轉化以後,在轉化回來就很麻煩了。

2) 對於一些數字,二進制傳輸Server是沒法處理的。如int 1,二進制數據是0x00000001,按字節傳輸的時候,client能夠正常發送,但是libevent收到以後,在拋給libevent_http層是,會把數據截斷,前兩位0x00是字符串的停止符。

 

所以,只能用base64來解決這個問題。base64將二進制的內容轉化成一組有意義的字符串,然後傳輸,server在decode。比較不錯的是,base64 encode以後,數據包只會增大1/3,效率還是不錯的。

 

下面是base64的實現,及測試代碼,聲明下base64的encode/decode不是我寫的,來自網友的實現,google/baidu下有很多的實現,我拿了一個看起來比較clean的code:)

 

 

搞定了編碼以後,明天估計網絡框架跟ministore就能聯調了,ministored有望!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章