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语言中也有两个版本。如对应于strlenwcslenwprintfprintf 的宽字符版。当然这两个版本的函数使用各自类型的参数,原因是显然的,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";
sizeofsizeof("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定义,内容为单字节的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值