hex和base32和base64的區別與聯絡

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

基本概念

  • hex也稱為base16,意思是使用16個可見字元來表示一個位元組,編碼後資料大小將翻倍,因為1個字元需要用2個可見字元來表示。

  • base32,意思是使用32個可見字元來表示一個位元組,編碼後資料大小變成原來的8/5,也即5個字元用8個可見字元表示,但是最後如果不足8個字元,將用=來補充。

  • base64,意思是使用64個可見字元來表示一個位元組,編碼後資料大小變成原來的4/3,也即3個字元用4個可見字元來表示。

用例

看個例子:

package mainimport "fmt"import "encoding/hex"import "encoding/base32"import "encoding/base64"func main() {    s := "hello world!"    sb := []byte(s)    hexString := hex.EncodeToString(sb)    hexByte, err := hex.DecodeString(hexString)    fmt.Println(hexString)    // 68656c6c6f20776f726c6421    fmt.Println(hexByte, err)    // [104 101 108 108 111 32 119 111 114 108 100 33] <nil>    base32StdString := base32.StdEncoding.EncodeToString(sb)    base32HexString := base32.HexEncoding.EncodeToString(sb)    base32StdByte, err1 := base32.StdEncoding.DecodeString(base32StdString)    base32HexByte, err2 := base32.HexEncoding.DecodeString(base32HexString)    fmt.Println(base32StdString)    // NBSWY3DPEB3W64TMMQQQ====    fmt.Println(base32HexString)    // D1IMOR3F41RMUSJCCGGG====    fmt.Println(base32StdByte, err1)    // [104 101 108 108 111 32 119 111 114 108 100 33] <nil>    fmt.Println(base32HexByte, err2)    // [104 101 108 108 111 32 119 111 114 108 100 33] <nil>    base64StdString := base64.StdEncoding.EncodeToString(sb)    base64UrlString := base64.URLEncoding.EncodeToString(sb)    base64StdByte, err1 := base64.StdEncoding.DecodeString(base64StdString)    base64UrlByte, err2 := base64.URLEncoding.DecodeString(base64UrlString)    fmt.Println(base64StdString)    // aGVsbG8gd29ybGQh    fmt.Println(base64UrlString)    // aGVsbG8gd29ybGQh    fmt.Println(base64StdByte, err1)    // [104 101 108 108 111 32 119 111 114 108 100 33] <nil>    fmt.Println(base64UrlByte, err2)    // [104 101 108 108 111 32 119 111 114 108 100 33] <nil>}

使用情境

有些小夥伴可能有疑問,為啥要把 "hello world!" 這麼明白的東西變成一串看不懂的東西,其實是這個例子使用了可見字元而已,而有很多字元是不可見的,我們需要把這些不可見字元變成可見字元。那為啥要變成可見字元?你是看著亂碼舒服還是看著可見字元舒服呢?其實不僅僅舒不舒服的問題,有些時候還必須要用可見字元,例如在網路中傳輸資料時,不同路由器對於不可見字元的處理是不同的,因此可能出現資料錯誤,因此還必須使用可見字元。

區別與聯絡

  • 區別主要就是空間效率的區別,base64是具有比較高的空間效率的。當然,hex編碼不區分大小寫,但是base32與base64是區分的。

  • 聯絡就是大家都是一種穩定的把位元組變成可見字元的編碼方式。

  • base32中StdEncoding和HexEncoding所使用的字元不同,但是具體其他區別我也不是很清楚。

  • base64中URLEncoding一般用於編碼URL

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.