ANSIC和Unicode之间的转换

一、简介

在VC开发中我们经常遇到字节转换的问题,因为现在开发基本都要用到Unicode,而C的函数都是ANSIC码的,如果我们在VC开发中需要用到C的函数就必须要处理这个问题,ANSIC码是单字节的,而Unicode是双字节的,本质上市单双字节的转换。


二、ANSIC

不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。


三、Unicode

Unicode统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。


四、字节转换

1.双字节转单字节,用WideCharToMultiByte();

     #include <iostream>  
	 using namespace std;  
	 #include <atlstr.h>  
	   
	 int main()  
	 {  
	     CString str = L"liuxijiao计算机网络";  
	     int n = str.GetLength(); //获取str的字符数  
	     int len = WideCharToMultiByte(CP_ACP, 0, str, n, NULL, 0, NULL, NULL); //获取宽字节字符的大小,大小是按字节计算的  
	     char *pChar = new char[len + 1]; //以字节为单位  
	     WideCharToMultiByte(CP_ACP, 0, str, n, pChar, len, NULL, NULL); //宽字节编码转换成多字节编码  
	     pChar[len + 1] = '\0'; //多字节字符以'\0'结束  
	     cout<<pChar<<endl;  
	          delete[] pChar;  
	     return 0;  
	 }  

运行结果:

liuxijiao计算机网络

2.单字节转双字节: MultiByteToWideChar()

     #include <iostream>  
	 using namespace std;  
	 #include <atlstr.h>  
	 #include <stdio.h>  
	 #include <string.h>  
	   
	 int main()  
	 {  
	    //将char数组转换为wchar_t数组  
	    char *pChar = "liuxijiao计算机网络";  
	     int charLen = strlen(pChar); //计算pChar所指向的字符串大小,以字节为单位,一个汉字占两个字节  
	     int len = MultiByteToWideChar(CP_ACP, 0, pChar, charLen, NULL, 0); //计算多字节字符的大小,按字符计算  
	     wchar_t *pWChar = new wchar_t[len + 1]; //为宽字节字符数申请空间,  
	     MultiByteToWideChar(CP_ACP, 0, pChar, charLen, pWChar, len); //多字节编码转换成宽字节编码  
	     pWChar[len] = '\0';  
	   
	     //将wchar_t数组转换为CString  
	     CString str;  
	     str.Append(pWChar);  
	   
	     delete[] pChar;  
	     delete[] pWChar;  
	     return 0;  
	 }  

运行结果:
liuxijiao计算机网络

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值