【飞郁2022新课程】11 - 字符内存中的储存方式
不同的数据在内存中的存放方式是不同的
我们说内存中每一位只存放了0和1,用来表示整数很容易,那怎么表示小数怎么表示?文字符号呢?这就需要不同的存放方式,用正确的方式也就是数据类型读取数据才能得到正确的值。
例如小数型的1.23,如果我们用整数的形式去读取他就不是1.23了。
如下图:
你可以猜结果会是1,毕竟1.23小数 硬转成整数的话,应该是1。
但是这和我们现实生活中是不一样的,内存中存放不同类型的数据储存方式是不同的,比如小数点,负数这些东西他是没有办法直接存放的,要有一个另外的规则。
(在我们以后逆向工具搜索数据的时候,首先要注意的也是他的数据类型)
字符的储存方式
char字符型,一个字节宽度
如果说 char a=65; 和 char a=‘A’; 两句代码是相同的你相信吗?
看下例子:
为什么呢?
这就是编码,用一字节可以表示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码,计算出他们的差值