char,wchar_t比较
来源:互联网 发布:mac在win键盘灯不亮 编辑:程序博客网 时间:2024/06/05 14:14
C语言相关
对应于char, C语言中也有宽字符内型wchar_t。wchar_t被定义为: typedef unsigned short wchar_t ;显然它是16位的。wchar_t类型的常字串应该这样写: L"hello" 。因此可以这样定义一个宽字符指针wchar_t *pwc=L"hello";。
对于字符串函数, C语言中也有两个版本。如对应于strlen有wcslen,wprintf是printf的宽字符版。当然这两个版本的函数使用各自类型的参数,原因是显然的,char和unsigned short 怎么能等同呢?编译器是不会放过你的。
下表是对char,wchar_t相关内容的比较:
既然有两个版本的函数,如果我们想在程序中同时支持它们该怎么办?如果使用VC++,你只要在程序中包含tchar.h头文件,这个文件中提供了一些宏以兼容两种字符集。例如:
#ifdef _UNICODE
typedef wchar_t _TCHAR;
typedef wchar_t TCHAR;
#define __T(x) L ## x
#define _tprintf wprintf
#define _tcslen wcslen
......
#else
typedef char _TCHAR;
typedef char TCHAR;
#define __T(x) x
#define _tprintf printf
#define _tcslen strlen
......
#endif
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
我们只要使用TCHAR,_tpirntf,_tcslen,_TEXT等,就可以兼顾两种字符集。
·Windows相关
Windows2000/NT完全支持Unicode,Windows98对Unicode支持很少。我们关心的是怎样编写程序,既可以编译为不支持Unicode,又可编译为支持Unicode。Windows SDK的头文件中定义了一些宏以完成这个任务。
typedef wchar_t WCHAR ; // wc
typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;
typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;
和标准C一样,windows C也使用TCHAR作为兼容的类型
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#define __TEXT(quote) L##quote
#else
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#define __TEXT(quote) quote
#endif
另外还有一个TEXT宏,等价于__TEXT宏:#define TEXT(quote) __TEXT(quote)。
写Win32 SDK程序的时候常常在注册窗口类时使用如下代码:
MessageBox ( NULL, TEXT ("This program requires Winodws 2000/NT"), szAppName, MB_ICONERROR) ;
return 0 ;
}
这样,当在Windows98下运行使用了Unicode的程序时,程序可以给出提示并退出。这段代码为什么在Win98下可以运行?因为MessageBox在存在Unicode的定义下,被替换为MessageBoxW,而MessageBoxW是Win98支持的少数宽字符Windows函数之一。
总之,写Windows SDK程序时尽可能使用像TCHAR,PTSTR,LPCTSTR,TEXT这样的宏。
- char,wchar_t比较
- char,wchar_t比较
- wchar_t与char的比较学习
- wchar_t char
- char wchar_t
- wchar_t <-> char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- wchar_t TO char & char TO wchar_t
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- char 转wchar_t 及wchar_t转char
- 第三讲
- nginx反向代理服务,因配置文件错误导致访问资源时出现404
- 恩布企业IM PC端,私有云服务端发布 1.20 版本
- Linux错误 curses.h:No such file or directory解决方案
- 第四讲
- char,wchar_t比较
- 第五讲
- PHP的imagettftext方法中文乱码
- MFC使用HttpGet和HttpPost方法与服务器通信
- 对zip压缩包进行解压
- 第六讲
- 06-图1 列出连通集
- Thinkphp框架中IF标签的易犯错误汇总
- mysql查询优化技巧