计算机里的字符串与GO语言中的字符串

9 篇文章 0 订阅
9 篇文章 0 订阅

引入

  • OK,计算机中使用0和1存储所有数据,对于数字,容易理解,通过二进制可以表示和存储。那么字符串呢?
  • 首先的解决方法是,定义一个字符集,比如OK我是夏洛,分别对六个字符进行对应编码。
  • 所以最初的ASCII字符集出现了,不过由于较早,所以很多字符没收入,比如中文,经过一系列增加修订,一直有很多字符集出现。最终Unicode出现,制霸统一,实现跨语言跨平台的文本转换和处理。

如何划分

  • 好了,编码解决了,如何读取?一长串内容该怎么划分
  • 首先的解决办法是,每一个字符都使用固定长度进行编码,可行,也就是定长编码,但是占用空间太大,浪费资源。然后,变长编码出现,类似IPV4地址划分,使用前几位进行标识,比如0-127使用一个字节,首位为0;128~2047使用两个字节,首位分别为110、10;2048-65535使用三个字节,首位分别为1110、10、10。OK,问题解决。
  • 这也就是UTF-8编码所使用的方法。

如何结尾

  • 现在开始存储字符串,读取的时候可以通过地址找到字符串开头,那么结尾呢?难道一直无边界的读下去?
  • C语言老大哥首先说话,“来,我直接每个字符串后面跟个\0,这就规定了字符串边界,不过这样每个字符串就不能包含\0了,或者通过一些磨磨唧唧的手段。
  • 而主角GO语言呢?直接在存储地址内容的后面直接加入长度信息,以字节为单位计数。

附加内容:GO语言中的string

  • GO语言中的string是不可对单独字符修改的,即不可使用s1[0]='h'这种语句,因为字符串是只读类型,是共用底层字符串的,一个修改,一起共用的变量会受影响。
  • 可以通过将字符串转为[]byte或者[]rune直接修改整个字符串也可以。这时都会创建一个新的内存空间,然后将string的值copy过去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值