永发信息网

VC中汉字是如何编码的?

答案:4  悬赏:0  手机版
解决时间 2021-01-26 08:53
我输入了这样的代码:
#include<stdio.h>
void main()
{
char a='李',b='白';
printf("a=%d,b=%d\n",a,b);
}
运行的结果是:a=-18,b=-41。为什么?
汉字的编码是怎样的?我记得原来学计算机基础的时候,书上讲了好几种码,有机内码、国标码等等,最后都不知道现在一般用的是哪一种码。
最佳答案
如果没有设置UNICODE开发环境,中文版VC中的汉字,用的是GBK(国标码)。
李的国标码是0xC0EE,白的国标码是0xB0D7
也就是说,各占两个字节。

char a='李',b='白';

字符型变量只有一个字节,所以这两个赋值语句,只把汉字的低位字节赋值给了变量。即:a=0xEE,b=0xD7

无符号十六进制用符号整数表示时,0xEE=-18, 0xD7=-41

你的这个问题,问题虽小五脏俱全,它里边包含了很多概念性的东西。
比如,UNICODE开发环境,C语言中的字符型变量,十六进制,有符号无符号整数,等等。
希望掌握好基本概念,对深入学习C语言很有好处。
全部回答
默认使用的是ANSI,汉字会被编码成两个字节,字母等编码为一个字节,并且汉字编码的第一个字节的最高位为1用以标识。所以,结果会是负数。
ascii码是表示字符的基本编码,由于它是8位字节编码,只能表示256个字符。事实上在早期,ascii是7位,英文的主要字符都小于128,后来扩展到8位,用大于128的编码表示特殊图形标记。 当计算机进入中国后,面临汉字表示的问题,汉字的数目远大于256,于是中国制订gb2312编码。 gb2312是一个兼容7位ascii的变长字节编码格式。所谓变长是指英文字符仍然使用单字节表示,而中文使用双字节表示,这样在一段中英文混排的文字当中,就有两种不同的字符字节长度。(这种方式给中英文字符处理带来很多麻烦,比如要统计一段文本的字符数,对于英文来说就是文本的字节长度,而对中英文混排就必须用专门的算法一个一个的统计)。 那么gb2312如何区分英文,中文呢?gb2312只兼容7位ascii编码,不能表示大于128的特殊图形标记。这样英文字符都小于128。而中文则采用大于128的两个字节表示,就不会发生冲突了。当遇到一个小于128的字节时,那就是一个英文字符,当大于128时,就将当前字节以及其后跟随的字节看做一个整体,就是一个中文字符。目前在中文环境下vc中默认使用的编码方式就是gb2312以及扩展编码。gb2312的问题是只能局限于简体中文环境下使用。国际上后来制订了gbk编码,可以同时支持中、日、韩编码,属于局限于东亚的地区性编码。 随着计算机普及,人们越来越需要同时表示多种语言字符。国际上制订了unicode编码标准,它能同时表达中文、日文、韩文、东西欧、英文等几乎所有文字。 unicode主要分为utf-32,utf-16,utf-8等类型。其中utf-32是等长编码,每个字符都用32位4字节表示,但这样带来很大的空间浪费。utf-16,utf-8实际上是对utf-32的改进压缩编码,属变长编码。特别是utf-8是目前国际上应用最广泛的编码格式,最新的软件开发都应当以utf-8为基础,以便支持多语言和国际化应用。 一般来说,软件中的文本分为程序文本和用户文本,比如在记事本软件中,菜单和提示框里面的文字都是在软件开发过程中就已经确定的,就是程序文本;用户文本是用户输入的数据,比如记事本中用书写的文章内容。 用户文本是用户使用软件时通过特定的输入法来输入,开发人员只需要将其保存为特定的编码格式就行了。 而程序文本是开发人员要关注的。目前的流行做法是,不推荐将文本以printf(“中文字符!n”);这样的形式直接写到代码中,因为这样以后要更改文本内容,或者支持其他语言提示时,要在整个代码中去修改这些字符串,不便于维护(有个项目,曾动用4名开发人员2周的时间,才把全部中文串替换成英文)。正常的做法是,将这些字符串集中保存在一个文本文件或其他类型资源文件中,需要输出提示时,通过字符串id的方式找到并加载对应的文本,然后再输出。 这样每次支持新的语言时,只要提供一个新的语言资源文件就可以了。
vc中使用的是微软ANSI(但不是ANSII) 微软采用代码页的方式解决超过256字符的字符集编码 一个字节有256种可能的排列, 大约100多个排列被定义成基本的ANSII字符,还有些排列被定义成和后一个字节连在一起解释(大概40+个),这样可以表示40*256个字符,即汉字字符集 所以你程序中的a,b占两个字节,第一字节是那40+个排列,数字都是大于128的,所以最高位为1。所以a和b的两个字节被连在一起解释成一个负数
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
虚拟机接通电源后显示 系统找不到指定的文件
如何让excel表格能够随文字大小变化自动调整
【噪音的危害作文】噪音的危害作文
高血脂应该吃什么药好了
有关湖州的民间传说?
成语暗箭伤人的意思是什么啊?有知道释义的请
网上退票钱怎么迟迟不打到账号上呢,不是说15
下列小林同学的行为,体现了“对他人负责”的
贵阳天龙美容美发用品怎么去啊,我要去那办事
我的世界服务器里自己装MOD做东西,别人能看
中央经历了50年前所未有的打击贪污大老虎
下列关于基因突变的描述,正确的一组是①所有
宋代尚书 是几品
乐山三人行补习班怎样
遇到比自己大很多的客户的老婆可以怎么称呼
推荐资讯
15(2008?威海)根据你对元素、分子、原子、
我家金毛 背部突然肿个大包,较硬
稻禾国际餐饮和稻盛和夫有关系吗
哈弗襄阳浩通专营店地址有知道的么?有点事想
【雪条】雪条是大家都喜欢吃的冷饮.请根据图
输入法无法切换怎么办
已知突触前膜释放的某种递质与突触后膜结合,
猪蹄黄豆汤适合什么人吃
天天玩具批发地址在哪,我要去那里办事
家里考了俩个大学生,要送多少钱合适?
go猫粮九种肉两个月的猫能吃么?
假如你被人讨厌,你会怎么办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?