golang字元、字串的那些事兒

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

通過下邊的代碼可以看出,r實質是int32,佔用4個位元組,值是25105;s是string,佔用3個位元組,值是e68891.

推斷r應該是unicode編碼的,s是utf8編碼的.

package main           import(    "fmt")           func main() {    r := '我'     fmt.Printf("%t\n", r)    // %!t(int32=25105)               s := "我"    fmt.Printf("%t, %d %x\n", s, len(s), s)    // %!t(string=我) 3 e68891               fmt.Printf("%b\n", int32(r))    // 110001000010001    // 0000 0000 0000 0000 0110 0010 0001 0001                   for _, b := range []byte(s) {        fmt.Printf("%b\n", b)    }    // 11100110    // 10001000    // 10010001}

現在列印出二進位的值進行比較,整理如下:

0000 0000 0000 0000 0110 0010 0001 0001 // r          1110 0110 1000 1000 1001 0001 // s

然後轉換s轉換為r,也就是utf8轉換為unicode

          1110 0110 1000 1000 1001 0001 // s               0110   00 1000   01 0001 // s utf8 -> unicode          0000 0000 0110 0010 0001 0001 // s utf8 -> unicode0000 0000 0000 0000 0110 0010 0001 0001 // r

轉換成功 得出結論 r是unicode編碼 s是utf8 編碼

golang和java一樣 字元是unicode編碼 字串是utf8編碼

底層這些東東一定要弄明白,不然會經常害人的.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.