golang语言中的byte和rune类型

发布于 1周前 作者 phonegap100 来自 分享

组成每个字符串的元素叫做“字符”,可以通过遍历字符串元素获得字符。 字符用单引号(’)包裹起来,如:

package main
import "fmt"
func main() {
	a := 'a'
	b := '0'
	//当我们直接输出byte(字符)的时候输出的是这个字符对应的码值
	fmt.Println(a)
	fmt.Println(b)

	//如果我们要输出这个字符,需要格式化输出
	fmt.Printf("%c--%c", a, b)  //%c	相应Unicode码点所表示的字符

}

字节(byte):是计算机中 数据处理 的基本单位,习惯上用大写 B 来表示,1B(byte,字节)= 8bit(位)

字符:是指计算机中使用的字母、数字、字和符号

一个汉子占用3个字节 一个字母占用一个字节

a := "m"
fmt.Println(len(a)) //1

b := "张"
fmt.Println(len(b)) //3
Go 语言的字符有以下两种:

uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。

rune类型,代表一个 UTF-8字符。

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。

Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

// 遍历字符串
package main

import "fmt"

func main() {
   s := "hello 张三"
   for i := 0; i < len(s); i++ { //byte
   	fmt.Printf("%v(%c) ", s[i], s[i])
   }
   fmt.Println()

   for _, r := range s { //rune
   	fmt.Printf("%v(%c) ", r, r)
   }
   fmt.Println()
}

输出:

104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 229(å) 188(¼) 160( ) 228(ä) 184(¸) 137() 104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 24352(张) 19977(三)

因为UTF8编码下一个中文汉字由3个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。

字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。

rune类型实际是一个int32

c3 := "营"
c4 := '营'
fmt.Printf("C3的类型%T--C4的类型%T", c3, c4) //C3的类型string--C4的类型int32
回到顶部