字符串在内存里的存储方式

字符串在内存里的存储方式

.

一、整数

在内存里的二进制表达方式很简单:
计算机内存存储方式本来就是用二进制来存储的,所以可以直接存储整数

十进制二进制
0000
1001
2010
3011

那么字符串需要如何存储呢?
.

二、字符串

会使用编号进行存储,可以理解为一个中间编号
例如:
A = 65 = 01000001
字符串A 等于 65编号 等于01000001
这也就是字符集,通过01000001则能存储对应的字符串A
ASCII字符集加上拓展字符一共是256个字符,不包含汉子
所以出现了GB2312,但是还是有很多的字符没有被录用,也不可能一直推出新的字符集来代表字符
所以又出现了通用字符集unicode
那么通用字符集的出现解决了很多字符的存储,比如单个字符我们都能用字符集来进行转换.
如果是多个字符呢?
比如:
存储 egg
那么他们各自字符对应的是

字符二进制
e01100101
g01100111
g01100111

存储的值为:011001010110011101100111
可是进行存储时,我们如何知道是 01100101 + 01100111 + 01100111 呢?
没有一个明确的边界处理,以及一个长度是无法获取出对应的字符串。
也有可能获取出 0110010101100111 +01100111 这样的结果就不是"egg"了
这个时候就出现了,定长编码和变长编码

.

二、定长编码和变长编码

.
定长编码:
定长编码是会把每个字符都给定最长的字节进行存储,比如最大的字符一共占了4个字节(比喻成四个字节),
那么不管字符是大还是小,都会统一存储为4个字节,这样下来就能清晰的清楚每4个字节代表着什么字符。
缺点:这样会大量的浪费内存空间,因为小的字符完全用不到四个字节。
这个时候就出现了变长编码
.
变长编码:
它会根据字符的长度那标记编码的模版

字符大小二进制说明
[0,127]0???第一个0标时是标记字节大小
[128,2047]110??? 10???第一次出现的8个数字 110 和第二次出现的八位数字 10 这种的代表 此范围的字节大小

以此种标记方式,就能清晰的知道一大堆数字的二进制,输出对应的字符串是什么了。
那这么一长串数字是如何存储到内存里呢。

二、字符串结构

1.使用data执行对应数字集的初始位置,这样就知道了第一位二进制数字。
那么结束位置呢。
c语言使用\0的方式来表示,不会限制字符串内容,缺点无法直接存储\0,否则会出现异常.
go语言,会添加一个标时len来存储全部字节的长度。不会限制字符串内容。

…end结束了…

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值