golang字符、字符串的那些事儿

来源:互联网 发布:淘宝的营销中心在哪找 编辑:程序博客网 时间:2024/05/22 00:44

通过下边的代码可以看出,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编码

底层这些东东一定要弄明白,不然会经常害人的.

0 0
原创粉丝点击