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,一经查实,立即删除!

相关文章

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…

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 …

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

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

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

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

【Day41】Python之路——AJAX

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

aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?

OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面:openssl aes-256-cbc -salt -in filename -out filename.encPython以PyCrypto包的形式支持AES,但它只提供工具。如何使用Python / PyCrypto解密使用OpenSSL加密的文件&#…

VUE-搜索过滤器

VUE非常实用的搜索过滤&#xff0c;喜欢点个赞哦 废话不多说&#xff0c;先来看看效果 1 引入vue <script src"https://cdn.jsdelivr.net/npm/vue"></script>2 HTML <div id"app"><input v-modelsearch /><ul v-if"search…

单选按钮必填会有红色选中提示吗_为什么单选按钮和复选框不能共存?

以下内容由摹客团队翻译整理&#xff0c;仅供学习交流&#xff0c;摹客设计协作一站式云平台&#xff0c;从产品、设计到开发&#xff0c;摹客来解决。单选按钮和复选框长期以来一直都是容易导致用户困惑的组件。这两个组件通常用于相同的情景下&#xff0c;但看起来又完全不同…

程序包org.junit.jupiter.api不存在

在跑项目的时候遇到这个问题&#xff0c;去看pom文件一切正常&#xff0c;也引入了这个依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope&…

thrift介绍及应用(一)—介绍

原文&#xff1a;http://blog.csdn.net/guxch/article/details/12157151 ------------------------------------------------------------------------------------ 一、概述 Thrift是Apache下的一个子项目&#xff0c;最早是Facebook的项目&#xff0c;后来Facebook提供给Apa…

matlab双目相机标定校正_基于双目视觉的无人机避障算法(一)

讲述在10月到12月所做的所有工作对于一个无人机自主避障来说&#xff0c;存在着以下流程&#xff1a;感知&#xff1a;障碍物检测、行人检测、目标检测SLAM&#xff1a;为无人机提供位置估计&#xff0c;构建稀疏环境地图路径规划&#xff1a;规划一条从当前位置到目标位置的移…

计算机无法播放,如果无法播放计算机mp4文件怎么办?

FireStar365接受1. 下载并安装最新版本的视频播放器(例如: Storm Video).2. 在硬盘中找到MP4视频文件.3. 右键单击该文件&#xff0c;然后选择打开方法“ Storm Video”.4. 可以双击打开页面.zxc942128835将mp4链接到计算机&#xff0c;打开磁盘&#xff0c;单击菜单栏上的工具…

thrift介绍及应用(二)—简单应用

原文&#xff1a;http://blog.csdn.net/guxch/article/details/12162131 ----------------------------------------------------------------------------------- 【接上文“thrift介绍及应用&#xff08;一&#xff09;—介绍”】 六、一个最简单的实例 Thrift文件&#xf…