Base64 筆記

來自維基百科

簡介

Base64是一種基於64個可打印字符來表示二進制數據的表示方法。由於2的6次方等於64,所以每6個比特爲一個單元,對應某個可打印字符。三個字節有24個比特,對應於4個Base64單元,即3個字節需要用4個可打印字符來表示。它可用來作爲電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數字0-9,這樣共有62個字符,此外兩個可打印符號在不同的系統中而不同。一些如uuencode的其他編碼方法,和之後binhex的版本使用不同的64字符集來代表6個二進制數字,但是它們不叫Base64。

Base64常用於在通常處理文本數據的場合,表示、傳輸、存儲一些二進制數據。包括MIME的email、在XML中存儲複雜數據。

轉換的時候,將三個byte的數據,先後放入一個24bit的緩衝區中,先來的byte佔高位。數據不足3byte的話,於緩衝器中剩下的bit用0補足。然後,每次取出6(因爲26=64)個bit,按照其值選擇ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作爲編碼後的輸出。不斷進行,直到全部輸入數據轉換完成。

當原數據長度不是3的整數倍時, 如果最後剩下一個輸入數據,在編碼結果後加2個“=”;如果最後剩下兩個輸入數據,編碼結果後加1個“=”;如果沒有剩下任何數據,就什麼都不要加,這樣纔可以保證數據還原的正確性。

應用

Base64可用於在XML文件中保存二進制數據。

《SDL Game Development》一書中的.tmx地圖文件(XML文件)首先使用zlib對數據進行壓縮,然後使用Base64進行編碼。

<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="right-down" width="20" height="15" tilewidth="32" tileheight="32" nextobjectid="1">
 <tileset firstgid="1" name="blocks1" tilewidth="32" tileheight="32" spacing="2" margin="2" tilecount="198" columns="18">
  <image source="D:/testSDL/testSDL/assets/blocks1.png" width="614" height="376"/>
 </tileset>
 <tileset firstgid="199" name="blocks2" tilewidth="32" tileheight="32" spacing="2" margin="2" tilecount="198" columns="18">
  <image source="D:/testSDL/testSDL/assets/blocks2.png" width="614" height="376"/>
 </tileset>
 <layer name="Tile Layer 1" width="20" height="15">
  <data encoding="base64" compression="zlib">
   eJxjYKA/SATipAGwFx3EAXE8ECcMkP3JQJwCxKkDZD+l4D4QPwDih1Qy7yMQfwLiz3jUbEDChAAzIwMDCyM1XAYBokCzxIBYnwpmSgCxJBBLAbE0EMsAsSwWdU+JNE8AiP3QMD8Z9hFrnicWeS8s5kgxQjAu82DyuMyDycMwAK5SFY8=
  </data>
 </layer>
</map>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章