汉字在内存里以什么形式存储?

csz_1987 2008-07-27 11:03:09
学校的教学都是用TC/TC++,无法输入/输出汉字。

最近刚开始使用vc,在vc里可以输入、输出、存储汉字。

请问用vc存到内存里的汉字的形式是什么样的?


1、

#include <iostream>
using namespace std;

int main()
{
char p[100]="汇编语言"; //这四个汉字在内存里怎么表示?
cout<<p<<endl;
return 0;
}



2、

#include <iostream>
using namespace std;

int main()
{
cout<<"汇编语言"<<endl; //直接输出,那这四个汉字是否进驻过内存?
return 0;
}


...全文
1110 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
legend507 2009-12-06
  • 打赏
  • 举报
回复
不错,学到了
tianxueer 2008-07-29
  • 打赏
  • 举报
回复
其实我觉的你好像问的是底层的东西。

不管是什么编码,放到内存里都是数字,如果不告诉你那是字符的编码,谁也不能区分那一个字节的含义,其实我觉得这都是操作系统和编译器的任务,比如windows编程中,你在一个字符串前面加上L,编译器就把它当成宽字符,也就是unicode编码,按照unicode编码的规则,比如翻译成2个字节,放入内存。

等到输出的时候,还是操作系统,由于ascii和unicode编码规则的不同,操作系统能判断出是什么编码,比如操作系统认为当前用的是unicode编码,那就读出2个字节,然后对照unicode的编码表,查出是哪个字符。如果是ascii编码,就读出一个字符,对照ascii的编码,查出是哪个字符。

有时候网页、邮件出现乱码,就是因为字符集或编码出错了,比如文件的作者是按照x编码保存的,结果浏览的时候用的是y编码解释,虽然内存里的东西都是一样的,但肯定是乱码。这时候如果选择让系统用x编码解释,就能正常显示了。

我说的是我自己的理解,大概意思是这样,可能有细节叙述的不太准确。不知道是不是你想知道的。


tianxueer 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 csz_1987 的回复:]
引用 8 楼 sitych 的回复:
一个汉字2个字节保存


这个我知道。
可能是我表述的不清楚吧。
我再复述一下我的问题。

我的意思是,像字符、数字之类的在内存里存放是以他们的ascii码的二进制码形式存放于内存的。
那汉字在内存里最终是怎么转换成二进制码从而存放与2bytes的内存空间内呢?
[/Quote]

既然你知道英文字符是转化为ascii码了,
那同样啊,汉字包括所有字符都能用unicode编码表示。

计算机刚开始是美国人发明的,他们只需要那几个字符,所以就用一个字节就能表示他们所需要的所有字符,
但后来计算机需要给全世界人使用,一个字节不能表示所有的字符,所以人们就规定了unicode编码,比如这个范围用来表示英文,这个区间用来表示中文。
这些都是规定好的,就像每一本书编程书封面都有ascii码表的,比如0x41是A,0x42是B...,你去网上能查到unicode的具体编码规则。

其实unicode现在也分好多种,不光有2个字节,还有4个字节的。
iami007 2008-07-29
  • 打赏
  • 举报
回复
在vc中应该用到了宽字符并且这种字符编码的方式就是unicode。存储的实质就是用2字节存储。像汉字之类的unicode是从0x3000到0x9FFF.
csz_1987 2008-07-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 tianxueer 的回复:]
其实我觉的你好像问的是底层的东西。

不管是什么编码,放到内存里都是数字,如果不告诉你那是字符的编码,谁也不能区分那一个字节的含义,其实我觉得这都是操作系统和编译器的任务,比如windows编程中,你在一个字符串前面加上L,编译器就把它当成宽字符,也就是unicode编码,按照unicode编码的规则,比如翻译成2个字节,放入内存。

等到输出的时候,还是操作系统,由于ascii和unicode编码规则的不同,操作系统能判断出是…
[/Quote]

十分感谢。了解了。
csz_1987 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sitych 的回复:]
一个汉字2个字节保存
[/Quote]

这个我知道。
可能是我表述的不清楚吧。
我再复述一下我的问题。

我的意思是,像字符、数字之类的在内存里存放是以他们的ascii码的二进制码形式存放于内存的。
那汉字在内存里最终是怎么转换成二进制码从而存放与2bytes的内存空间内呢
richbirdandy 2008-07-28
  • 打赏
  • 举报
回复
跟内存没关系 你想问的是怎么编码吧
sitych 2008-07-28
  • 打赏
  • 举报
回复
一个汉字2个字节保存
ForestDB 2008-07-28
  • 打赏
  • 举报
回复
英文字母怎么存?
jameszhanglei 2008-07-28
  • 打赏
  • 举报
回复
#include<graphics.h>
#include<stdio.h>
#include<fcntl.h>
#include<io.h>
#include<stdlib.h>
#include<conio.h>
#define ROW 1 /*纵坐标放大倍数*/
#define COL 2 /*横坐标放大倍数*/
void main()
{
int x,y;
char *s="汉字显示程序";
FILE *fp;
char buffer[32];/*buffer用来存储一个汉字*/
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
int gd=VGA,gm=VGAHI;
initgraph(&gd,&gm,"");
if((fp=fopen("hzk16","rb"))==NULL)
{printf("Con't open hzk16,Plase add it");getch();closegraph(); exit(0);}
x=20;y=100;
while(*s){
qh=*(s)-0xa0;
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp);
for(i=0;i<16;i++)
for(n=0;n<ROW;n++)
for(j=0;j<2;j++)
for(k=0;k<8;k++)
for(m=0;m<COL;m++)
if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL) putpixel(x+8*j*COL+k*COL+m,y+i*ROW+n,GREEN);
s+=2;
x+=30;
}
getch();
closegraph
lionc650 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jackyid 的回复:]
学习ing
[/Quote]
Thirty 2008-07-28
  • 打赏
  • 举报
回复
学习ing
JIGSONG 2008-07-28
  • 打赏
  • 举报
回复
对应的UNICODE码~

[Quote=引用楼主 csz_1987 的帖子:]
学校的教学都是用TC/TC++,无法输入/输出汉字。

最近刚开始使用vc,在vc里可以输入、输出、存储汉字。

请问用vc存到内存里的汉字的形式是什么样的?
[/Quote]
zairenjian_1 2008-07-28
  • 打赏
  • 举报
回复
是存储在程序的常量数据区。
我看你有戏 2008-07-28
  • 打赏
  • 举报
回复
cout<<"汇编语言"<<endl; //直接输出,那这四个汉字是否进驻过内存?
这几个字存在内存的常量区的吧
t84770 2008-07-28
  • 打赏
  • 举报
回复
汉字应该算字符串
vc可以查看到汇编
看看汇编的编码吧
agurick 2008-07-27
  • 打赏
  • 举报
回复
1.在VC中是本地编码。简体windows下就是简体中的GB编码,如果你学了unicode的话,你会知道,如果给字符串前面加了L它就会是unicode编码
2.当然。
Neil_wyh 2008-07-27
  • 打赏
  • 举报
回复
不明白
Windows程序设计里提到ASCII和Unicode,和这个应该有关系吧
HelloDan 2008-07-27
  • 打赏
  • 举报
回复
看一下Unicode编码
dbger 2008-07-27
  • 打赏
  • 举报
回复
这个跟内存没关系的。

TC/TC++生成的文件格式是DOS格式,DOS本身不支持汉字的。

VC生成的文件格式是win32 PE格式,windows本身就是支持汉字的。

第一章 计算机基础知识 汉字输入编码可分几类 ?各有何特点 ? 答:汉字编码方法主要有三类 :数字编码 ,拼音编码和字形编码 . 数字编码就是用数字串代表一个汉字的输入 ,常用的是国标区位码,也有用电报码 使用区 位码输入汉字时,必须根据国标GB3212《信息交换用汉字编码字符集一一基本集》,先查出 汉 字对应的代码 , 然后才能输入 . 这种编码输入的优点是无重码 , 而且输入码和内码的转换比较 方便, 但每个汉字的编码都是一串等长的数字 , 很难记忆 拼音码是以汉语读音为基础的 , 由于汉字同音字太多 , 输入重码率很高 , 因此按拼音输入后 还必须进行同音宇的选择 , 影响了输入速度 . 字形编码是以汉字形状确定的 , 由于汉字都是由一笔一划构成的 , 而笔划又是有限的 , 而且 汉字的结构 ( 又称部件 ) 也可以归结为几类 , 因此, 把汉字的笔划和部件用字母和数字编码后 , 再按笔划书写顺序依次输入 , 就能表示出一个汉字 . 常用的有五笔字型编码 . 这种编码输入方 法其效率目前是最高的 . 计算机有哪些基本特点 ?(P13) 答:1. 运算速度快 2. 存储容量大 3. 计算精度高 4. 逻辑判断力强 5. 自动化程度高 简述计算机的四个发展阶段 ?(P7) ":第一代 "1946 "年- 1953 年 "电子管 " "第二代 "1954 "年- 1964 年 "晶体管 " "第三代 "1965 "年- 1970 年 "集成电路 " "第四代 "1971 "年至今 "大规模和超大规模集成电路 " 在计算机中表示数时 , 为什么要引入补码 ? 答:因为计算机不会做减法,只能做加法,引入补码就是二进制用加法来代替减法。 简述计算机在信息社会的主要应用( P13-P15) 答:1. 科学计算 2. 数据处理 3. 过程控制 4. 计算机辅助系统 5. 人工智能 6. 网络通信 计算机为何使用二进制数 ?而不用十进制数 ? (P24) 答:1. 电路简单 2. 工作可靠 3. 简化运算 4. 逻辑性强 第二章 计算机软、硬件系统 简述内存与外存的主要特点 答:内存是用来存放计算机系统执行时所需要的数据,存放各种输入、输出数据和中间 计算 结果,以及与外部存储器交换信息时作为缓冲。主要特点是访问速度快,价格比较贵。 外存 主要是用来保存暂时不用的程序和数据,在计算机关闭电源之前,程序运行结果要保存 到外 存中,否则会丢失。与内存相比,外存的特点是存储容量大,价格较低,而且在断电的 情况 下也可以长期保存信息,所以称为永久性存储器。缺点是存取速度比内存储器慢。 简述ROM与 RAM勺主要特点 答: 随机存储器(RAMI是一种可读可写的存储器,存放当前正在执行的数据和程序。断 电 后,随机存储器中的所存储的数据会全部丢失。我们通常所说的计算机内存容量就是指 RAM 的容量。 只读存储器(ROM的主要特点是:存储在其中的数据只能读出、不能修改,关 机 或断电ROM中的数据也不会丢失。ROM中主要存放系统参数和基本输入输出系统。 简述冯 诺依曼原理及其要点(P32- P33) 答:计算机基本工作原理都采用"存储程序"和"程序控制"为基础的设计思想。 要点: 1.用二进制形式表示数据和指令 2. 采用存储程序方式 3. 计算机由运算器、控制器、存储器、输入设备和输出设备 5 部分组成 何谓启动计算机?启动分哪几种形式? 答:启动分为热启动和冷启动。热启动就是在电脑已开启电源的情况下的启动,常在机 器运 行中出现异常死机情况时使用,常用方法有按复位按钮启动和按 Ctrl +Alt +Del 组合键启 动;冷启动就是在电脑尚未开启电源的情况下按主机电源按钮进行的启动。 什么叫多媒体 ?什么叫 MPC? 答:多媒体是一种以计算机为中心的多种媒体的有机组合,这些媒体包括文本、图形、 动画、 静态视频、动态视频和声音等,并且人们在接受这些媒体信息时具有一定的主动性、交 互性。 mpC旨的是多媒体计算机。 简要叙述计算机的基本组成各部件的主要功能以及各部件之间的关系。 答:1. 运算器又称算术逻辑单元,是进行算术运算和逻辑运算的功能部件。 2. 控制器是整个 计算机系统的控制中心,它旨挥计算机各部分协调的工作,保证计算机按照预先规定的 目标 和步骤有条不紊地进行操作及处理。 3. 存储器的主要功能是用来存储程序和各种数据信息, 并能在计算机运行中高速自动完成旨令和数据的存取。 4. 输入设备是用来输入计算程序和原 始数据的设备。5.输出设备是用来输出计算结果的设备。各部件的关系见 P28页图3-2 简述机器语言、汇编语言、高级语言的主要特点及区别。 答:机器语言是用二进制代码表示的语言,是计算机唯一可以直接识别和执行的语言, 它具 有计算机可

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧