汉字在计算机内存中,到底是以啥形式存在的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉字在计算机内存中,到底是以啥形式存在的?相关的知识,希望对你有一定的参考价值。

“王”这个字符串在内存中到底是以Unicode的编码形式存在呢?,还是以UTF-8编码的形式存在呢?又是如何打印输出的呢?

我理解的流程是:
第一步:保存
以UTF-8编码保存,那么文件里面的每个字符,都会从Unicode字符集中找到对应的码位,找到“王”的Unicode字符集的码位是0x0000738B,对应的Unicode编码就是
0000 0000 0000 0000 0111 0011 1000 1011,然后按UTF-8编码规则转换成 1110 0111 1000 1110 1000 1011。也就是说“王”这个字符是以1110 0111 1000 1110 1000 1011
这样的二进制编码存在的。

第二步:读取文件数据到内存

那么就要把文件数据流读取到内存,此时计算机得到的“王”的编码是 1110 0111 1000 1110 1000 1011 ,而文件头告诉了计算机这是UTF-8编码,所以此时计算机就会根据UTF-8的规则,再转成实际的Unicode编码,也就是这个0000 0000 0000 0000 0111 0011 1000 1011。这个过程也叫解码。
“王”在计算机内存中实际存储的编码是0000 0000 0000 0000 0111 0011 1000 1011。

第三步:打印输出
既然计算机拿到了“王”的Unicode编码是0000 0000 0000 0000 0111 0011 1000 1011,那就知道“王”的码位是什么,因此就可以在Unicode字符集找到对应的字符,然后输出到控制台,用户就可以用肉眼看到字符了。

字符的保存、读取、输出流程是这样吗?

大体上没错。保存在硬盘上的就是01编码。用unicode编码的。gbk编码,utf8编码的汉字。编码是不一样的。
读出来编码。再从你电脑使用的默认字体里找到对应的图形显示出来。
参考技术A 汉字编码方式很多,有国标码(GB2312_1980),大五码,GBK,简体18030,区位码,电报码,还有它们的变形:unicode 大端小端码,UTF-8,UTF-*,HZ 等等。

内码特点 :二进制双字节,每字节用到8bits.

输入原理,把连续输入的ASCII字符串,通过中文输入软件转化为双字节 中文内码。

输出原理,从 双字节中文内码 查出 字体(font)和 “刻痕",放大/缩小,在频幕或纸上显示打印出来。

hdu 2030

PS:原本这道题就空了好久...今天才去查了下汉字机内码... 然后才知道了.

1—— 一个汉字在字符串中是以两个负的字符形式存储,所以本题只要把字符串中负字符的个数找出来,再

除以2 就OK了。

2——汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。 计算机中, 补码第一位是符号位, 1 表示为 负数, 所以 汉字机内码的每个字节表示的十进制数都是负数

 代码:

#include "stdio.h"
#include "string.h"
int main(){
 int num,n,s,j,i;
 char a[200];
 while(~scanf("%d",&n)){
  getchar();
  for(i=0;i<n;i++){
   gets(a);
   s=strlen(a);
   num=0;
   for(j=0;j<s;j++){
    if(a[j]<0){
     num++;
     j++;
    }
   }
   printf("%d\n",num);  
  }
 }
 return 0; 
}

以上是关于汉字在计算机内存中,到底是以啥形式存在的?的主要内容,如果未能解决你的问题,请参考以下文章

计算机里面啥是webshell?

杭电2030 汉字统计

计算机中的“溢出”到底是啥意思

字符型数据在内存中是以啥形式存放的

计算机到底能识别多少汉字?

在opencv中,图像是以啥数据类型存储的