一种是uint8类型,或者叫byte型,代表了ASCII码的一个字符。 另一种是rune类型,代表一个UTF-8字符。当需要处理中文、日文或者其他复合字符时, 则需要用到rune类型。rune类型实际是一个int32。 使用fmt.Printf中的“%T”动词可以输出变量的实际类型,使用这个方法可以查看byte和rune的本来类型,代码如下: vara byte =...
fmt.Println(bytes2string2(bs)) } func bytes2string1(bs []byte) string { return string(bs) } func bytes2string2(bs []byte) string { return *(*string)(unsafe.Pointer(&bs)) } 第一种转换也是一个非常标准的转换方式,第二个方式使用了不安全的做法。 String、rune 相互转换 String to rune f...
packagemainimport("fmt""unicode/utf8""unsafe")funcmain(){c:="go语言"s_rune_c:=[]rune(c)s_byte_c:=[]byte(c)fmt.Println(s_rune_c)// [103 111 35821 35328]fmt.Println(s_byte_c)// [103 111 232 175 173 232 168 128]fmt.Println(utf8.RuneCountInString(c))//4fmt.Println(len(...
byte:类似 uint8,代表了 ASCII 码的一个字符,也可以说是 ASCII 字符类型 rune:类似 int32,表示一个 Unicode 码点 uintptr:无符号整型,用于存放一个指针 UTF-8 是 Unicode 的实现方式之一。UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字...
字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。 rune类型实际是一个int32 c3:="营"c4:='营'fmt.Printf("C3的类型%T--C4的类型%T",c3,c4)//C3的类型string--C4的类型int32...
package main import "fmt" /*6, String类型及字符串编码1, 概念: 多个byte的集合, 理解为一个字符序列2, 语法: 使用双引号"ab...
fmt.Printf("bytes(hex):% x\n",[]byte(tempStr)) } 对应输出的效果如下: string:"BGBiao 的SRE人生." rune(char):['B' 'G' 'B' 'i' 'a' 'o' ' ' '的' 'S' 'R' 'E' '人' '生' '.'] rune(hex):[42 47 42 69 61 6f 20 7684 53 52 45 4eba 751f 2e] ...
golang中的string底层应该是用byte数组存储的,而且属于不可变类型。 计算机是二进制的,字符最终也是转换成二进制保存起来的。 字符集就是定义字符对应的数值。Unicode是一个字符集,为每个字符规定表达的数字,但是并没有规定该数字的二进制保存方式,utf8作为可变长度字符编码,规定了对于unicode值的二进制保存方式。
string、byte、rune 在go中字符串有很多令人困惑的地方,所以查了些资料,搞懂了些,写下此文方便查阅。 1. 从一个困惑开始 packagemainimport"fmt"funcmain(){s:="hello 中国"fmt.Println(len(s))fori:=0;i<len(s);i++{fmt.Printf("%c ",s[i])}}// 12// h e l l o ä ¸ å ...