Unicode数据类型(与ANSI关系和相互转化) - ameyume的专栏 - CSDN...

来源:百度文库 编辑:神马文学网 时间:2024/05/02 10:48:45

1,Windows定义Unicode数据类型
WCHAR(Unicode字符)
PWSTR(指向Unicode字符串的指针)
PCWSTR(指向一个恒定的Unicode字符串的指针)
以上都是Unicode字符和字符串。同时windows定义了ANSI/Unicode通用数据类型PTSTR和PCTSTR。
Unicode宏没有前置下划线,_UNICODE宏用于c运行期头文件,而UNICODE用于windows头文件。

2,c对UNICODE的支持
比如常见函数:char *strchr(const char*,int) --------->wchar_t *wcschr(const wchar_t *,wchar_t);
                         int strcmp(const char*,const char*)-------->int wcscmp(const wchar_t*,const wchar_t*);
例如strcpy--->wcscpy,strlen->wcslen;实际是把wcs取代ANSI前缀str。
3,TChar.h
TChar.h文件唯一作用帮助创建ANSI和UNICODE通用源代码。
如果定义_UNICODE,TCHAR声明为:
      typedef wchar_t TCHAR
如果没有定义_UNICODE:
     typedef char TCHAR;
分配字符串 TCHAR szString[100];或者TCHAR *szE="hello world";
如果生成UNICODE不是ANSI串,必须改写为:TCHAR *szE=L"hello world";(L意思是UNICODE字符串编译);
同时也可以改写为TCHAR *szE=_TEXT("hello world");
4,Windows编程中建议使用系统函数,而不是c运行字符串函数
   使用时候加上ShlApi.h头文件。函数样子为StrCat、StrChr等等(开头字母大写)
5,windows字符串函数
windows提供的UNICODE函数;例如:
lstrcat,lstcmp,lstcmpi、lstcpy、lstrlen。这些函数可以调用UNICODE也可以调用ANSI版本。
如果没有定义了UNICODE,lstcat将扩展为lstcatA,如果定义了UNICODE,扩展为strcatW。

6,Unicode 和ANSI相互转化
char szA[100]; // An ANSI string buffer
WCHAR szW[100];//A Unicode string buffer
sprintf(szA,"%s","ANSI Str");            //Normal sprintf: all string are ANSI
sprintf(szA,"%S",L"Unicode Str");   //Converts Unicode string to ANSI
swprintf(szw,L"%S",L"Unicode Str");// Normal swprintf: all string are Unicode
swprintf(szW,L"%S","ANSI Str");        // Converts ANSI string to Unicode
(严格注意大小写S)
LPTSTR 等价于 char *
LPCSTR 等价于 const char *
7,UNICODE和ANSI之间转化字符(函数参考MSDN)
MultiByteToWideChar (多字节字符串转化为宽字节字符串)
WideCharToMultiBye(宽字符串转为多字节字符串)

实例:

char buf[MAX_PATH];
               size_t aLen = strlen( buf ) + 1;

                int wLen = MultiByteToWideChar(CP_ACP,0,buf,aLen,NULL,0);

                LPWSTR lpw = new WCHAR [wLen];
                MultiByteToWideChar(CP_ACP,0,buf,aLen,lpw,wLen);
                。。。。。。。。。。。。//使用lpw
                delete []lpw;

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ameyume/archive/2009/08/16/4448398.aspx

Unicode数据类型(与ANSI关系和相互转化) - ameyume的专栏 - CSDN... ffmpeg与ffdshow的关系 - zysee的专栏 - CSDN博客 CPU位数、操作系统位数和编译器位数关系 - ray_zhang_3的专栏 - CSDN博... 相互转化的那些事儿 张立宪:《读库》和我是相互成就的关系 c#泛型和反射的设计应用(一) - yutao051的专栏 - CSDN博客 微软经典面试测试题和参考答案(变态) - jiangxinyu的专栏 - CSDN博客 C++中的位拷贝和值拷贝 - liam1122(小亮)的专栏 - CSDN博客 Oracle RMAN的备份与恢复命令详解(一) - Safuel的专栏 - CSDN博客 Flex与Javascript交互 - dante_k7的专栏 - CSDN博客 民国时期高等教育研究与启示 - scofieldlan的专栏 - CSDN博客 taglist安装与应用 - 阿堂的专栏 - CSDN博客 曲线拟合与插值 - Rosicky10的专栏 - CSDN博客 企业文化与“酱油党” - wmnothing的专栏 - CSDN博客 UML类图关系全面剖析 - 一雨田的专栏 - CSDN博客 baozhengw的专栏 - CSDN博客 unicode,ansi,utf-8,unicode big endian这些编码有什么区别 字符编码转化 - daniel_yao的专栏 - CSDNBlog swf文件格式说明书(中文)! - qdlgx的专栏 - CSDN博客 LINUX常用命令(基础) - ckboss的专栏 - CSDN博客 bat命令大全(转) - annhf的专栏 - CSDN博客 qvod与gvod原理分析与对比 - danscort2000的专栏 - CSDN博客 合格的电子工程师需要掌握的知识和技能 - weizi422的专栏 - CSDN博客 合格的电子工程师需要掌握的知识和技能 - weizi422的专栏 - CSDN博客