c语言wchar转化为char_Char&wchar | 学步园

http://hi.baidu.com/zeficie/blog/item/219a1550b3a50a5b1038c2d1.html

摘自---考拉的空间

1.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++6.0)

char类型

wchar_t类型

类型大小(32位系统)

8位

16位

常量字符表示法

'A'

L'A' 或 'A'

常量字符串表示法

'hello'

L'hello'

一些使用方法

char c='A'; (c的值:0x41)

wchar_t wc='A'; (wc的值:0x0041)

char* p='hello';

wchar_t* pw=L"hello";

sizeof

sizeof("hello")=6

sizeof(L"hello")=12

计算长度

strlen("hello")=5

wcslen(L"hello)=5

LPSTR 一个32位的指向字符串的指针

LPCSTR 一个32位的指向字符串常量的指针

LPWSTR 一个32位的指向unicode字符串的指针

LPCWSTR 个32位的指向unicode字符串常量的指针

前面的L代表LONG,P就是指针的意思,C就是constant的意思

W是wide的意思,STR就是string的意思

LPSTR = char *

LPCSTR = const char *

LPWSTR = wchar_t *

LPCWSTR = const wchar_t *

LPOLESTR = OLECHAR * = BSTR = LPWSTR(Win32)

LPCOLESTR = const OLECHAR * = LPCWSTR(Win32)

LPTSTR = _TCHAR *

LPCTSTR = const _TCHAR *

3.L是表示字符串资源为Unicode的。

比如

wchar_t Str[] = L"Hello World!";

这个就是双子节存储字符了。

_T是一个适配的宏~

当#ifdef _UNICODE的时候_T就是L

没有#ifdef _UNICODE的时候_T就是ANSI的。

比如 LPTSTR lpStr = new TCHAR[32];

TCHAR* szBuf = _T("Hello");

以上两句使得无论是在UNICODE编译条件下都是正确编译的。

char是普通的单字节字符。

宏_TCHAR ,_T的作用一样(分别针对变量与常量字符串):

如果系统有UNICODE定义,内容为双字节的。

如果无UNICODE定义,内容为单字节的

你可能感兴趣的:(c语言wchar转化为char)