go的rune & byte 类型

 基础语法  2022-04-30  admin  908  1225

//rune & byte 类型

//byte是uint8的别名类型,一个值就是一个ASCII码值。

//rune是int32的别名类型,一个值就代表一个Unicode字符。

//rune类型的值在底层都是由一个 UTF-8 编码值来表达的。

//Unicode字符,平时接触到的中英日文,或者复合字符,都是Unicode字符。

//UTF-8 编码方案会把一个 Unicode 字符编码为一个长度在 1~4 以内的字节序列。

//所以,一个rune类型值代表了1~4个长度的byte数组。


//一个string类型的值既可以被拆分为一个包含多个字符的序列,也可以被拆分为一个包含多个字节的序列。 前者可以由一个以rune为元素类型的切片来表示,而后者则可以由一个以byte为元素类型的切片代表。

//golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。

func main() {
	str := "abc 学习"

	fmt.Println([]byte(str))  // [97 98 99 32 229 173 166 228 185 160]
	fmt.Println([]uint8(str)) // [97 98 99 32 229 173 166 228 185 160]
	fmt.Println([]rune(str))  // [97 98 99 32 23398 20064]
	fmt.Println([]int32(str)) // [97 98 99 32 23398 20064]
	//fmt.Println([]int8(str))  //错误,没有int8

	fmt.Println(string([]byte(str))) //abc 学习
	s := []byte{98}
	fmt.Println(string(s))             // b
	fmt.Println(string([]rune{20013})) // 中
	fmt.Println(string(rune(20013)))   // 中

	fmt.Printf("长度byte:%v, 长度rune:%v, 长度utf8:%v", len(str), len([]rune(str)), utf8.RuneCountInString(str)) //长度byte:10, 长度rune:6, utf_str =

	for k, v := range str {
		fmt.Printf("\n索引:%v,值:%v", k, v)
	}
	//索引:0,值:97
	//索引:1,值:98
	//索引:2,值:99
	//索引:3,值:32
	//索引:4,值:23398
	//索引:7,值:20064

	for k, v := range []byte(str) {
		fmt.Printf("\n索引:%v,值:%v", k, v)
	}
	//索引:0,值:97
	//索引:1,值:98
	//索引:2,值:99
	//索引:3,值:32
	//索引:4,值:229
	//索引:5,值:173
	//索引:6,值:166
	//索引:7,值:228
	//索引:8,值:185
	//索引:9,值:160

	for k, v := range []rune(str) {
		fmt.Printf("\n索引:%v,值:%v,值:%v", k, v, string(v))
	}
	//索引:0,值:97,值:a
	//索引:1,值:98,值:b
	//索引:2,值:99,值:c
	//索引:3,值:32,值:
	//索引:4,值:23398,值:学
	//索引:5,值:20064,值:习
}


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

转载必须注明出处:

go的rune & byte 类型 —— code.cent123.com

相关推荐


esp32 使用mqtt 通讯

esp32 使用mqtt 通讯基于go的mqtt 客户端packagemain import( "fmt" "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "gobot.io/x/gobot" &qu

GoFrame 框架中使用 mqtt 协议通讯

GoFrame 框架中使用 mqtt//SPDX-License-Identifier:MIT //SPDX-FileCopyrightText:2022mochi-mqtt,mochi-co //SPDX-FileContributor:mochi-co packagemqtt import( "flag" "gfmqtt/internal/

go 生成密码 php的 password_hash go实现

packagemain import( "fmt" "golang.org/x/crypto/bcrypt" ) funcmain(){ hashedPassword:=passwordHash("123456") fmt.Println(hashedPassword) hashedPassword=

go 递归读取目录,并生成树形结构的数据

go 递归读取目录,并生成树形结构的数据//读取目录中的所有文件,如果是目录则递归读取,生成结构化的树形struct packagemain import( "encoding/json" "fmt" "os" "path/filepath" ) //TreeNode文件的树形结构体 ty