目录

【飞郁2022新课程】11 - 字符内存中的储存方式

不同的数据在内存中的存放方式是不同的

我们说内存中每一位只存放了0和1,用来表示整数很容易,那怎么表示小数怎么表示?文字符号呢?这就需要不同的存放方式,用正确的方式也就是数据类型读取数据才能得到正确的值。

例如小数型的1.23,如果我们用整数的形式去读取他就不是1.23了。

如下图:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/122341vsiha8jc88lilcgq.png

你可以猜结果会是1,毕竟1.23小数 硬转成整数的话,应该是1。

但是这和我们现实生活中是不一样的,内存中存放不同类型的数据储存方式是不同的,比如小数点,负数这些东西他是没有办法直接存放的,要有一个另外的规则。

(在我们以后逆向工具搜索数据的时候,首先要注意的也是他的数据类型)

字符的储存方式

char字符型,一个字节宽度

如果说 char a=65; 和 char a=‘A’; 两句代码是相同的你相信吗?

看下例子:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/122341rn0e3ooleqeodelo-20211121101544491.png

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/122341vlz0l9m50zllr5vx-20211121101552393.png

为什么呢?

这就是编码,用一字节可以表示256个符号,一字节范围 0-255。

但是一般用不到, 128个符号足够了,我们键盘才几十个符号。

这就是ASCII编码 也就是文字符号的储存方式。

可是中文不像英文那样几十个符号就可以表示,中文汉字有几万个,那么我们就需要复杂的编码表。

是这样设计的 ,把127个符号以后的符号用作表示汉字的一半前127保留原来的含义,这样2字节表示一个汉字,就有了万种左右的组合。

但是这只是基本的情况够用 ,还是不能表示全部的汉字,那么就又有了GBK GB18030 等等的拓展

以及其他的编码。

例如unicode utf-8 等编码,当然其他地区也可以有自己的编码。

一般如果外服软件和游戏我们出现乱码,往往原因不是这三种编码 ,我们的系统里没有字库。

例子台湾big5。

习题+考核

1.定义两个字符分别等于’F’和’B’,并用无符号整数型输出二者的和

2.分别打印出以下字符的ASCII码,‘1’,‘a’,‘F’,’!’

3.分别打印出以下数字对应的字符,49,50,59,60,69,70

4.打印出大写字符F和小写字母f的ascii码,计算出他们的差值