vc Ansic-Unicode处理

13 篇文章 0 订阅

1.ANSIC与Unicode字符

  两者区别就不多少了,一个单字节一个双字节,Unicode可以表示更多的字符,适合诸如汉字的文字系统.

  定义使用宽字符:

  2.声明Unicode字符与及字符串方法:

  _T()宏需要包含tchar.h

1   wchar_t c=L'A'; 
2   wchar_t szBuffer[10]=L"A String";
3  

  WinNt.h定义了一下宏:

 1 #ifdef UNICODE 
 2  typedef WCHAR TCHAR ,*PTCHAR,PTSTR;
 3  typedef CONST WCHAR *PCTSTR;
 4  #define __TEXT(quote) quote
 5  #define __TEXT(quote) L##quote
 6 
 7  #else
 8  typedef CHAR TCHAR ,*PTCHAR,PTSTR;
 9  typedef CONST CHAR *PCTSTR;
10  #define __TEXT(quote) quote
11 
12  #endif
13  #define __TEXT(quote) quote TEXT(quote)
14 
15  

  可以利用以上宏来定义:在Visual Studio新建工程,一般都开启了Unicode选项,直接就可以定义宽字符。

1 TCHAR C=TXET('a');//如果定义了Unicode 则是16位字符,否则是8位
2    TCHAR C=L'a';
3   TCHAR szBuffer[10]=TEXT("a String");
4   TCHAR szBuffer[10]=_T("a String");
5  

  3.Ansic与Unicode的转换:

 1 //定义ANSIC字符串
 2    char *c ="Test!";
 3   std::cout<<c<<std::endl;
 4   //ANSIC转到宽字符
 5    int Length = MultiByteToWideChar(CP_ACP,0,c,-1,NULL,0);
 6   wchar_t *pWideCharStr = new wchar_t[sizeof(wchar_t)*Length];
 7   MultiByteToWideChar(CP_ACP,0,c,6,pWideCharStr,Length*sizeof(wchar_t));
 8   std::wcout<<"MultiByteToWideChar:"<<pWideCharStr<<std::endl;
 9   //宽字符转换到ANSIC
10    Length = WideCharToMultiByte(CP_ACP,0,pWideCharStr,-1,NULL,0,NULL,NULL);
11   char *pMultiByte = new char[Length*sizeof(char)] ;
12   WideCharToMultiByte(CP_ACP,0,pWideCharStr,-1,pMultiByte,Length*sizeof(char),NULL,NULL);
13   std::cout<<"WideCharToMultiByte:"<<pMultiByte;
14 
15   delete [] pWideCharStr;
16   delete [] pMultiByte;

  4.推荐的字符串使用方式

  1).开始将文本字符串想像为字符的数组,而不是char或字节的数组

  2).用通用的数据类型如用TCHAR PTSTR表示字符和字符串

  3).统一用TEXT _T宏来表示字面量的字符和字符串,不要混用

  4).用BYTE和 PBYTE来表示字节、字节指针和数据缓冲区

  5).避免使用printf系列函数,尤其不要使用%s来进行Ansic跟Unicode的互相转换

  应该使用MultiByteToWideChar和WideCharToMutiByte,具体用法参看MSDN

  6).推荐从现在开始就使用Unicode字符,理由很简单,为了程序代码的重用性:Com编程模型只支持Unicode   

   微软.net技术,还有新的API函数都不支持ANSIC


转载自http://dev.21tx.com/2010/08/04/13200.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值