c++代码转为go_Go语言学习笔记六--string编码


分解探索string编码

转为byte数组

func main() {s := "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 为什么是15呢?for _, v := range []byte(s) {fmt.Printf("%X ",v) //%X 转为16进制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21//猜测从第三个开始(E5 B0 8F) -> 小 ,后面都是三个字节代表一个汉字//其实utf-8 是使用的可变长度来编码的(世界上这么多语言,如果全部都是3个直接来编码,太浪费空间)}
}

通过打印我们猜测,这个byte数组中,中文汉字是使用3个字节来编码

直接遍历string

验证:上述猜想

func main() {for k, v := range s {   //v is a runefmt.Printf("(%d,%X)",k,v)//(0,48)(1,69)(2,5C0F)(5,667A)(8,52A0)(11,6CB9)(14,21)}
}

如图for k, v := range sv是一个int32类型:

bb3bfbc744f3984a3652a5a840c1edfa.png

发现从第三个开始汉字,下标正确2,但是下一个就变成了5,这说明,上面转为byte数组时我们的猜想是正确的, 一个汉字使用了3个byte来表示,但是这样遍历 根本不是我们想要的,因为下标的问题.

总结:既 直接遍历字符串时,k 为 byte数组的下标 而 v 却是int32类型(rune)

utf8工具类解码

//使用 utf8工具类fmt.Println("s rune counts:",utf8.RuneCountInString(s))//s rune counts: 7 ,发现是s的长度是我们想要的了

既然可以得到正确的长度了,尝试一个字一个字解码

bytes := []byte(s)for len(bytes)>0 {ch, size := utf8.DecodeRune(bytes) //解码byte数组 返回rune和size长度bytes = bytes[size:] //截取bytefmt.Printf("%c " ,ch)}
H i 小 智 加 油 !  //发现每个字符都被解码出来了

结论

在go中,rune就相当于Java中的char,而rune是uft8编码

正常遍历一个string的方法

fmt.Println();for k, v := range []rune(s) { //直接将string转为rune切片fmt.Printf("(%d %c)",k,v) //%c 可以将rune转为 字符串}
(0 H)(1 i)(2 小)(3 智)(4 加)(5 油)(6 !) 得到了我们想要的答案.

TEST:查找到一个字符串中最长不重复字符串(国际版)

这里直接跳过了这个test的解题思路,如果没有看过的同学, 点击上篇查看

func findMaxNoRepeatString(s string) int {start := 0keysIndex := make(map[rune]int)lenth := 0for i, v := range []rune(s) { //将byte换成rune即可lastIndex, ok := keysIndex[v]if ok && lastIndex >= start {start = lastIndex + 1} else {lenth = i - start + 1}keysIndex[v] = i}return lenth
}

作者所有的学习源码在 go学习源码github地址,如果觉得有用的话帮小智贡献一个star

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux机器件拷贝文件

常用命令有:sftp,scp sftp [rootzengmg develop_soft]# sftp 192.168.255.132Connecting to 192.168.255.132... The authenticity of host 192.168.255.132 (192.168.255.132) cant be established. RSA key fingerprint is bd:09:eb:22:2f:ed:95:57:ab…

steam游戏时长计算机,我加入steam五年了,盘点下我买过的22款正版单机游戏

我加入steam五年了,盘点下我买过的22款正版单机游戏2020-02-17 10:50:07104点赞72收藏37评论大家好吖,在2015年的时候朋友就推荐了我入坑steam,不过那个时候更多的知道这是个dota启动器,慢慢的steam也越来越出名啦,中国…

AdPlayBanner:功能丰富、一键式使用的图片轮播插件

概述 AdPlayBanner:功能丰富、一键式使用的图片轮播插件详细 代码下载:http://www.demodashi.com/demo/11312.html AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件,主要用以自动或者手动地播放轮播图,提供了Fresco、…

pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...

点击上方“AI派”,关注公众号,选择加“星标“或“置顶”导读只需要添加几行代码,就可以得到更快速,更省显存的PyTorch模型。你知道吗,在1986年Geoffrey Hinton就在Nature论文中给出了反向传播算法?此外&…

引入静态变量_Common Lisp变量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常简单:只是用一个名字空间,所有表达式中相应位置的值应该是明确的。Common Lisp和Scheme最大的不同是,函数名字空间和数据的名字空间是分离的。操作函数名字空间的语句包括,defun&#xff…

JobTracker和TaskTracker

转载:http://blog.csdn.net/keda8997110/article/details/8348705 ----------------------------------------------------------------------------------------- JobTracker和TaskTracker JobTracker 对应于 NameNode TaskTracker 对应于 DataNode DataNode 和Na…

c理c利用计算机怎么弹,通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的...

通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的计算机的工作方式:现代计算机的基本体系结构都是采用冯诺依曼结构,冯诺依曼的设计思想最重要之处是"存储程序"的这个概念。计算机的工作过程,就是执行程序的…

Linux安装MySQL的两种方法

原文链接:http://blog.csdn.net/superchanon/article/details/8546254 --------------------------------------------------------------------------------------- 1. 运行平台:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安装…

jenkins 手动执行_想知道如何用Jenkins自动执行Python脚本输出测试报告?

前言在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作。借助Jenkins,我们可以结合 Git/SVN 自动拉取代码,可以设置定时构建,接着就可…

VR 影院,约吗?

世界第一家 VR 影院已经开张,朋友,去不? 世界第一家 VR 影院正式开张 (无大屏的 VR 电影院) 在被称为 VR 元年的 2016 年,越来越多的人加入了这个新兴的领域,各种传统应用也在被 VR 包装之后以…

redis cluster 分布式锁_关于分布式锁原理的一些学习与思考redis分布式锁,zookeeper分布式锁...

首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法、变量。在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在jdk …

会计行业被计算机取代马云,会计人:为什么我神烦“人工智能取代说”?

原标题:会计人:为什么我神烦“人工智能取代说”?原创来源:学会计有方法从财会机器人诞生到马云的无人商店,全行业掀起了一股“人工智能取代说”的热潮。有些财会朋友在一轮又一轮的信息轰炸下,倍感压力&…

mysql5.6允许远程服务器访问数据库

创建一个mysql用户,并设置可以远程访问 grant usage on *.* to fredlocalhost identified by fred;//创建用户fred密码ferdselect host,user,password from mysql.user where userfred;//查看记录 grant all privileges on *.* to fred%identified by fred;//设置可以远程访问…

sp烘焙流程_小手雷-PBR材质流程(一)——(基本材质)

小手雷-PBR材质流程(一)Substance Painter生存手册经过了12个章节的讲解后,已经完结了(。・ω・。)相信大家经过了生存手册这一基础教程过后,对Substance Painter这款软件已经有了比较坚实的基础了,…

MyBatis-进阶2

typeHandler typeHandler有什么用? 你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。 具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandle…

python中 r是什么意思_python中rb含义理解

Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 文件使用方式标识 r:默认值,表示从文件读取数据 w:表示要向文件写入数据,并截断以前的内容 a:表示要向文件写入数据&#xff0…

哈佛大学计算机生物科学,生命科学专业

【出国留学网】昨日,泰晤士报公布了最新版2018年世界大学生命科学排名,哈佛大学位列第一。本文是关于世界各国大学在本次生命科学排名中的具体表现,供你选校参考。The 2018 Times Higher Education World University Rankings’ table for li…

怎样呵护友谊_呵护真正的友情,助力漫长的人生

友情,即友谊,是指朋友和朋友之间的感情。它是一种很美妙的东西,可以让你在失落的时候变得高兴起来,可以让你走出苦海,去迎接新的人生。它就像一种你无法说出又可以感到快乐无比的东西。只有拥有真正朋友的人&#xff0…

【Day41】Python之路——AJAX

什么是AJAX AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 优点: 不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行 同源…

LINUX重启MYSQL的命令

原文:http://blog.csdn.net/liuyong0818/article/details/5693336 ------------------------原文有错误,本文转载时已修改--------- 如何启动/停止/重启MySQL 一、启动方式 1、使用 service 启动:service mysql start 2、使用 mysql 脚…