采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
如标题,汉字占3个字节,rune是4个字节的,那么既然是以rune的结构存放的汉字,那么每个数据都应该是4个字节才对啊,为什么index[3]的下一个汉字的其实index是6?
go语言的字符串本身是utf-8编码的,汉子占三个字节,所以[3]后面是[6]
当我们用for循环来拿里面的元素时,for i, ch := range s,这里获得的ch已经经过了utf-8 => unicode的转换,转换的结果放在了ch里面。utf-8和unicode是不同的编码方式。
我们这里也看到,这个字符的utf-8编码是0xE68595,而我们拿到的ch是0x7231,go语言的运行环境已经帮我们做了一次转换
也就是说在字符串里面的时候 一个汉字是3个字节,而在用for语句取出了rune的汉字,就做了一次转化,将转码的unicode存到ch的变量中,这时unicode是占4个字符的。 那当我们执行for i, ch := range s的时候,s中的字符串应该是被复制到了新的地址吧?而且是一个连续的4*s.length个字节长度。s的内容都被转码复制到这个新的地址, ch就是for的时候根据slice的顺序访问连续空间中的元素
第一段是对的。第二段,它不需要新开辟连续的空间。for的时候,UTF-8发现是中文三字节,就把三个字节取出,作转换,转换后的结果赋值给ch就行。就相当于一个整数赋值。
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.8k 14
744 1
2.1k 1
1.1k 12