论字节集加&密 #2 数据类型之间的秘密

上期讲了字节的规格和字节集内单独字节的处理方法,这期我们来讲字节与文本的转换,字节数据在与文本的转换是会跟照编码来找字符的样子,比如字节集 {255,0,0,0} 在到字节集中使用255的整数便可以达到,但如果我们把数据放到256,便会发现,数据进阶了!
字节集数据变为了:{0,1,0,0}
由此我们可以看出如果直接将整数数据转换为字节集的话会得到的是整数的存储结构,所以易语言中整数的存储是4个字节的存储,而一个字节占8bit,所以整数型能够占32Bit的长度,超出这个长度就意味着大家都知道的溢出了!通过计算 255*255*255*255 我们可以知道这个整数型的最大存储数:4,228,250,625 在很多时候这个长度足够大家使用了,但有时候却不够用这时候长整数等就可以来替代整数型。
(长整数可以达到8个字节,也就是64Bit的存储长度)
刚才我们运算的都是正整数,那如果是负整数呢?刚才我们计算出来的其实是整数型的最小数到最大数的长度,那么两头的最大值,是由-2,147,483,648~2,247,483,647;
这就比较玄学,我们刚才把四个字节填满得到的是4,228,250,625,而这两头的长度加起来并没有和刚才我们填满的数字有多少相似。因为整数型并不是把每个位都填为255就可以计算出最大值,真正的计算方程应该是这样的,UP主总结了一下 :假如这是一个32Bit的整数数据,那么他的计算方式 就是 -2^(32-1)~2^(32-1) 在有符号位的整数中我们在最大值需要-1 例如:[2^(32-1) ]-1,无符号位的整数型的最大值就是 2^(32-1),公式就是 2^(占位长度-1);
那么短整数和长整数的取值范围通过计算我们可以得知为:
短整数 -32768~32768 长整数 -9223372036854775808~9233372036854775807
刚才说了有符号位和无符号位,这两种其实属于补码,补码具体可以参考:https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81
由于这种站位的出现,存储的数值数据可以分为正数和负数,具体运算方法在上面这个网站也可以找到,那么数值与字节集就讲到这里,再讲究偏题了。
接下来我们讲一下文本转成的字节集,在 到字节集() 中直接填数字的话,就等于把一个数值扔了进去,注意,这里是数值不是文本,在字符串的存储方式中,一个字符只有一个字节或两个字节,为什么存储的字节不同,这就是语言的差异,很多语言的存储字节是两个字节,而英语的组成方式是26字母,在传统的ASCII表中只有最常见的键盘上的字符,还有一些空白的字符,具体是什么可以去ASCII表中查看,那么ASCII表中没有中文,是怎么解决的?这就考虑到了添加编码的重要性,就拿易语言来说,其显示方式通过的就是Ansi编码,如果你将一段Unicode的数据复制到Ansi显示的编辑框中,显示出的就是乱码,通过编码转换,我们可以在Ansi的编辑框中编辑Unicode的文本,当然也可以在Unicode的编辑框中编辑Ansi的内容,当然在于两种编码的差别,Unicode的很多字符在Ansi表中是无法找到的,所以这种问题时我们必须更改显示文本的控件的编码和原编码一样。当然在不同的编码中,有的字符的存储位也是不一样的,这里UP为了省键盘,就简单的给大家举一个栗子:在Ansi也可以说GBK编码中汉语中的一个字符,例如“中”,是占两个字节的,而在Unicode编码(可以说UTF-8)中占用的是三个字节。但Unicode是要比Ansi庞大的,所以很多地方用的都是Unicode编码,而不是Ansi编码,当然易语言这点缺陷也是可以通过代码来修补的,例如:编码转换()
最后还有一种类型,那就是逻辑型,这里UP帮大家测试了一下,在到字节集中真的字节集结构是{1,0,0,0} 而假的字节集结构是 {0,0,0,0} 可以看到两者的首数字是不一样的,在其他很多IDE中使用的也会是 0 / 1 来代替真假,而在易语言中可以使用另一种方式来将真假转换为两位的字节集数据,那就是 先将逻辑型的数据转换为文本,然后再转换为字节集,这时候我们发现:真{213,230} 假{188,217} 变成了在GBK编码中的字符,如何在GBK中找到呢?首先我们将两个字节分别转换为16进制,拿真来说 DEC:213=HEX:D5;DEC:230=HEX:E6 ,然后将他们拼合,我们就得到了D5E6,在GBK编码中对应的,我们能找到 真 这个字符,那么D5E6的十进制并不是213230,也不是213+230,所以在反过来的转换中,我们还需要将这个字符拆成两份,再转换为十进制就得到了 213 和 230 两个数字,我们将这两个用字节的方式存到一个字节集中,然后在易语言中的编辑框(因为这个编辑框是Ansi编码的)显示这个字节集转换为的文本,就可以得到我们的"真","假"也是同理;