您好,登录后才能下订单哦!
这篇文章主要介绍“go语言字符类型byte与rune源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言字符类型byte与rune源码分析”文章能帮助大家解决问题。
byte类型介绍byte 类型是 uint8 的别名,可以表达只占用 1 个字节的传统 ASCII 编码的字符,例如 var c byte = 'A'
用单引号括起来的单个字符是字符类型,用双引号括起来的字符是字符串类型
package main
import "fmt"
func main(){
var c byte = 'A'
fmt.Println(c)
fmt.Printf("%T ",c)
fmt.Printf("\n")
var d rune = 'A'
fmt.Println(d)
fmt.Printf("%T ",d)
// var e byte = 'AB' // more than one character in rune literal
// var e rune = 'AB' // more than one character in rune literal
var e string = "AB"
fmt.Println(e)
fmt.Printf("%T ",e)
fmt.Printf("\n")
var f byte = 'C'
println(f)
f = 88
println(f)
}
// 结果如下
65
uint8
65
int32
AB
string
67
88rune类型介绍在书写 Unicode 字符时,需要在 16 进制数之前加上前缀\u或者\U。
Unicode 至少占用 2 个字节,所以我们使用 int16 或者 int 类型来表示。
需要使用到 4 字节,则使用\u前缀,如果需要使用到 8 个字节,则使用\U前缀。
var h int = '\u0041' fmt.Println(h) // 65 var i int = '\U00000041' fmt.Println(i) // 65
package main
import "fmt"
func main(){
str:="hello 世界"
for i:=0;i<len(str);i++{
fmt.Printf("%c",str[i]) // hello ä¸ç
fmt.Printf("\n")
}
}
// 结果如下:
h
e
l
l
o
ä
¸
ç上面结果,英文字符正确打印,但中文乱码。是因为UTF8编码下一个中文汉字由3~4个字节组成,而字符串是由byte字节组成,所以长度也是byte字符长度,这样遍历时遇到中文就乱码了。
在 Go 中,有一个遍历方式是 range,它默认就是以 UTF-8 编码形式去读每一个字符。当涉及到的字符串中含有非英文字符时,可以使用 range 来遍历:
104 101 108 108 111 32 19990 30028
此时输出的字节编码就是 UTF-8 编码号,UTF-8 编码是包含 ASCII 编码的,所以前 6 个编号还是一样的,后面两个编号分别代表世,界。
所谓对字符串的修改其实不是对字符串本身的修改,而是复制字符串,同时修改值,即重新分配来内存。
在go中修改字符串,需要先将字符串转化成数组,[]byte 或 []rune,然后再转换成 string型。
package main
import "fmt"
func main(){
str:="hello"
fmt.Println(str)
s1:=[]byte(str)
s1[0]='H'
fmt.Println(string(s1))
}
// 结果如下
hello
Hellopackage main
import "fmt"
func main(){
str01:="hello 世界"
fmt.Println(str01)
s2:=[]rune(str01)
s2[0]='H'
fmt.Println(string(s2))
}
// 结果如下
hello 世界
Hello 世界关于“go语言字符类型byte与rune源码分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。