// 可以用,此程序实现的是是文字转换到机内码。机内码=国标码+8080H,不过学习了。//此程序是利用汉字在机器内输出就是机内码的原理,直接保存的,其实挺简单.//输入一串汉字和数字的混合字符, 经过程序转换, 对应输出一串16进制码(数字-〉ASII码,汉字—〉国标码)
    CString temp;GetDlgItemText(IDC_EDIT1,m_hanzi);//将汉字保存到变量m_hanzi
unsigned char *b=new unsigned char[m_hanzi.GetLength()+1];//新建无符号字符 数组,赋值给无符号字符指针b
memcpy(b,m_hanzi,m_hanzi.GetLength());//m_hanzi中的汉字字符  复制到字符指针b中(内存中)for(int i=0;i<m_hanzi.GetLength();i++) //一个字符一个字符进行转换  ( 汉字的长度 )
    {m_shuzi.Format(" %x", b[i]);//内存中的机器码字符用十六进制显示temp=temp+m_shuzi;//文本框中显示
    }m_shu.SetWindowText(temp);//
    delete(b);//删除字符指针b 

vc/c++中的英文字符仍然采用ASCII编码方式。可以设想,其他国家程序员利用vc/c++编写程序输入本国字符时,vc/c++则会采用该国的字符编码方式来处理这些字符。

我个人猜测,vc安装程序中应该带有不同国家的内码库,这样一来肯定会占用很大的空间。

2.VC中汉字的编码方式

vc/c++正是采用了GB2312内部码作为汉字的编码方式,因此vc/c++中的各种输入输出方法,如cin/wcin,cout /wcout,scanf/wsanf,printf/wprintf...都是基于GB2312的,如果汉字的内码不是这种编码方式,那么利用上述各种 方法就不会正确的解析汉字。

可以用下面的Demo程序来模拟vc/c++中输出汉字字符的过程。

 unsigned char input[50];cin>>input;int flag=0;for(int i =0 ;i < 50 ;i++){if(input[i] > 0xa0 && input[i] != 0){if(flag == 1){cout<<"chinese character"<<endl;flag = 0;}else{flag++;}}else if(input[i] == 0){break;}else{cout<<"english character"<<endl;}}

输入:Hello中国 (“中国”对应的GB2312内码为:214 208,185 250)

输出:english character

english character

english character

english character

english character

chinese character

chinese character

Java与C#语言都是采用Unicode编码方式,在这两种语言中定义一个字符,在内存中存放的就是这个字符的两字节Unicode码。如下所示:

char a='我';    => 内存中存放的Unicode码为:25105

----

上面unsigned char input[50] ,这属于声明了Unicode编码格式,所以你后面的那句话“问题又产生了”,没有任何意义。我个人的看法

VC中的汉字编码

转载自:http://m.blog.csdn.net/blog/wwxl1986622/7227266

vc/c++中的英文字符仍然采用ASCII编码方式。可以设想,其他国家程序员利用vc/c++编写程序输入本国字符时,vc/c++则会采用该国的字符编码方式来处理这些字符。

我个人猜测,vc安装程序中应该带有不同国家的内码库,这样一来肯定会占用很大的空间。

二 解决引入问题所需的知识

主要需两方面的知识,第一个为字符尤其是汉字的编码,以及语言和工具的支持情况,第二个是vc/c++中MutiByte Charater Set 和 Wide Character Set有关内存分配的情况。

三 汉字的编码方式及在vc/c++中的处理

1.汉字编码方式的介绍

对英文字符的处理,7位ASCII码字符集中的字符即可满足使用需求,且英文字符在计算机上的输入及输出也非常简单,因此,英文字符的输入、存储、内部处理和输出都可以只用同一个编码(如ASCII码)。

而汉字是一种象形文字,字数极多(现代汉字中仅常用字就有六、七千个,总字数高达5万个以上),且字形复杂,每一个汉字都有"音、形、义"三要素, 同音字、异体字也很多,这些都给汉字的的计算机处理带来了很大的困难。要在计算机中处理汉字,必须解决以下几个问题:首先是汉字的输入,即如何把结构复杂 的方块汉字输入到计算机中去,这是汉字处理的关键;其次,汉字在计算机内如何表示和存储?如何与西文兼容?最后,如何将汉字的处理结果从计算机内输出?

为此,必须将汉字代码化,即对汉字进行编码。对应于上述汉字处理过程中的输入、内部处理及输出这三个主要环节,每一个汉字的编码都包括输入码、交换码、内部码和字形码。在计算机的汉字信息处理系统中,处理汉字时要进行如下的代码转换:输入码→交换码→内部码→字形码。

(1)输入码: 作用是,利用它和现有的标准西文键盘结合来输入汉字。输入码也称为外码。主要归为四类:

a)      数字编码:数字编码是用等长的数字串为汉字逐一编号,以这个编号作为汉字的输入码。例如,区位码、电报码等都属于数字编码。

b)      拼音码:拼音码是以汉字的读音为基础的输入办法。

c)      字形码:字形码是以汉字的字形结构为基础的输入编码。例如,五笔字型码(王码)。

d)      音形码:音形码是兼顾汉字的读音和字形的输入编码。

(2)交换码:用于汉字外码和内部码的交换。交换码的国家标准代号为GB2312-80。

(3)内部码:内部码是汉字在计算机内的基本表示形式,是计算机对汉字进行识别、存储、处理和传输所用的编码。内部码也是双字节编码,将国标码两个字节的最高位都置为"1",即转换成汉字的内部码。

(4)字形码:字形码是表示汉字字形信息(汉字的结构、形状、笔划等)的编码,用来实现计算机对汉字的输出(显示、打印)。

2.VC中汉字的编码方式

vc/c++正是采用了GB2312内部码作为汉字的编码方式,因此vc/c++中的各种输入输出方法,如cin/wcin,cout /wcout,scanf/wsanf,printf/wprintf...都是基于GB2312的,如果汉字的内码不是这种编码方式,那么利用上述各种 方法就不会正确的解析汉字。

仔细观察ASCII字符表,从第161个字符开始,后面的字符并不经常为用户所使用,负值也未使用。GB2312编码方式充分利用这一特性,将 161-255(-95~-1)之间的数值空间作为汉字的标识码。既然255-161 = 94不能满足汉字容量的要求,就将每两个字符并在一块(即一个汉字占两个字节),显然,94* 94 =8836基本上已经满足了常用汉字个数的要求。计算机处理字符时,当连续处理到两个大与160(或-95~-1)的字节时,就认为这两个字节存放了一个 汉字字符。可以用下面的Demo程序来模拟vc/c++中输出汉字字符的过程。

unsigned char input[50];

cin>>input;

int flag=0;

for(int i =0 ;i < 50 ;i++)

{

if(input[i] > 0xa0 && input[i] != 0)

{

if(flag == 1)

{

cout<<"chinese character"<<endl;

flag = 0;

}

else

{

flag++;

}

}

else if(input[i] == 0)

{

break;

}

else

{

cout<<"english character"<<endl;

}

}

输入:Hello中国 (“中国”对应的GB2312内码为:214 208,185 250)

输出:english character

english character

english character

english character

english character

chinese character

chinese character

3.新的内码标准---Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语 言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普 及。最新版本的 Unicode 是 2005年3月31日推出的Unicode 4.1.0 。另外,5.0 Beta已于2005年12月12日推出,以供各会员评价。

Unicode 编码系统可分为编码方式和实现方式两个层次。

编码方式:Unicode 的编码方式与 ISO 10646 的通用字符集(Universal Character Set,UCS)概念相对应,目前的用于实用的 Unicode 版本对应于 UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示 216 个字符。基本满足各种语言的使用。实际上目前版本的 Unicode 尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。

实现方式:Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。Unicode 的实现方式称为Unicode转换格式(Unicode Translation Format,简称为 UTF)。如,UTF-8 编码,这是一种变长编码,它将基本7位ASCII字符仍用7位编码表示,占用一个字节(首位补0)。而遇到与其他 Unicode 字符混合的情况,将按一定算法转换,每个字符使用1-3个字节编码,并利用首位为0或1进行识别。

Java与C#语言都是采用Unicode编码方式,在这两种语言中定义一个字符,在内存中存放的就是这个字符的两字节Unicode码。如下所示:

char a='我';    => 内存中存放的Unicode码为:25105

----

上面unsigned char input[50] ,这属于声明了Unicode编码格式,所以你后面的那句话“问题又产生了”,没有任何意义。我个人的看法

转载于:https://www.cnblogs.com/rechen/p/5097337.html

vc 文字转换到机内码,输入汉字和数字, 输出一串16进制码(数字-〉ASII码,汉字—〉国标码)...相关推荐

  1. js 根据深浅色背景,动态设置黑色白色文字颜色。判断颜色是否为深色,rgb转16进制,16进制转rgb

    效果图: 根据深浅色背景,返回黑白文字颜色. 第一版: 代码: <!DOCTYPE html> <html lang="en"> <head>& ...

  2. Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    文章目录 前言 简述 ASCII GBK Unicode UTF-8 应用场景 开发环境 编码转换 16进制数值转换为16进制字符 16进制数值转化为字符串 16进制字符串转换为Unicode字符串 ...

  3. C语言文件操作(五)将txt格式16进制编码转化为txt格式汉字

    准备 将想要转换为16进制的文字保存为after.txt,与该程序放在同一目录下 举例 存好after.txt,运行程序后,将在同一目录下生成文件words.txt C代码 //文件操作2.cpp # ...

  4. 二进制-八进制-十进制-16进制之间的转换

    进制之间的转换 主要用到连个函数: Convert.ToInt32(str,numbased):将字符串转成str,按照numbeased指定的进制转成10进制数: Convert.ToString( ...

  5. Hbase value存储的16进制转10进制与汉字

    一.Hbase16进制数字转10进制 value=\x00\x00\x00\x00\x07'\x0E\x00 这串16进制中有ACSII码字符 ACSII编码对照表:http://ascii.911c ...

  6. c语言16进制数字母对应,写一个函数,输入一个十六进制数,输出相应的十进制数(附C程序 和 更加简单的实现方法)...

    写一个函数,输入一个十六进制数,输出相应的十进制数.基本思路是16进制数以字符串输入,然后经过转变为相应的10进制数,主要处理A~F六个字母对应的值,相应的程序如下: #include #includ ...

  7. hive转16进制unhex_Java 进制的转换

    什么是进制? 进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的"正"字计数法,以及类似的tally mark计数). 对 ...

  8. c# .net 16进制转换10进制

    业务调用 #region C#十六进制字符串转十进制 { Console.WriteLine("-----------十六进制字符串转十进制---------");//H:十六进制 ...

  9. Java将16进制字符串,转换成字符串

    Java将16进制字符串,转换成字符串 前段时间遇到同事给了我一串16进制的字符串,让我把它给转成正常的字符串. 16进制字符串: c8:ed:cc:bd:d5:eb 转换后正常的字符串: 软探针 解 ...

最新文章

  1. NLP 领域还有 5 大开放问题
  2. RabbitMQ学习系列(五): RPC 远程过程调用
  3. 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据...
  4. activiti流程跟踪图简单详解
  5. 洛谷P1352 没有上司的舞会(树形DP水题)
  6. DeepMind发布Sonnet 帮你用TensorFlow快速搭建神经网络
  7. ThinkPHP讲解(十二)——文本编辑器和ajax传址
  8. spring cloud 启动bean 循环依赖问题记录
  9. maven打本地JAR包
  10. Python 的PIL,可以解决ImportError The _imagingft C module is not installed
  11. red linux 9 中文,Red Hat Linux 9 命令行中文显示问题
  12. 记账系统推荐金蝶精斗云_金蝶精斗云的免费财务做账软件有哪些?
  13. Segmentree beats!---吉如一线段树学习笔记
  14. php微信公众号采集器,WordPress微信公众号采集插件
  15. vue代码怎么变成小程序_从项目中由浅入深的学习vue,微信小程序和快应用 (1)
  16. openGL学习之旅(一)DEV-C++安装GLUT
  17. 如何在 HTML中使用图标字体
  18. 用计算机说出人说的话,用计算机语言说一句情话
  19. 三阶魔方背后的神奇数学
  20. 国医中药,人参神秘而又独特的地位

热门文章

  1. react+express +materialui模板
  2. Scrum: 谁是利益相关者?
  3. Kotlin代码转换成Java代码
  4. vue利用【​v-viewer插件】实现单张图片以及多张图片的(触屏缩放和拖动)
  5. ie浏览器调用本地文件无反应_我的ie浏览器为什么打不开本地的网页文件啊?...
  6. 阿里,京东,蚂蚁面试题
  7. PyQt5安装失败总结
  8. API调用展示,淘宝、天猫、拼多多商品页面详情API,APP端原数据参数返回
  9. 怎样进网站空间服务器,怎样进网站空间服务器
  10. 2019年寒假集训-二分专题