WCHAR与CHAR的转换

Windows API中很多参数是LPTSTR类型的,关于这个LPTSTR很多人都解释过了,没什么好说的

#ifdef UNICODE

 typedef LPWSTR LPTSTR

#else

typedef LPSTR LPTSTR

#endif

说白了,就是一个自适应的字符指针,在2005环境下当你调用某个包含 LPTSTR 参数的函数的时候,如果你试图用一个 char* 糊弄,那就会残忍的报错了,怎么办呢,土办法,你不要宽字符吗,好,我转。同理,你不憎恨宽字符吗,我转。

网上能找到很多关于LPSTR与LPTSTR互相转换的帖子,不幸的是都是一个片断,拿过来肯定不能用的。

LPSTR与LPTSTR之间的转换方法有很多,不过我就会两种,一个是ATL宏,还有一个是API

这里要说一下那个ATL宏,是的,很简单

A2W( )  W2A( )

一眼就能看明白,A表示ANSI,W表示Wide,还有好多好多,可以去MSDN查一查,多好用的宏阿,可不能白用

#include <AtlBase.h>

#include <AtlConv.h>

这两句不能少,还有,用宏之前加一句 USES_CONVERSION ,要不然直接报错了

用这个宏还有一个问题,当我用 new 分了一块内存然后掉了这个宏,最后释放的时候报错了,怎么办?作为一个懒人我是不会去试图理解那么复杂的事的,我用数组,内存管理我不管

粗糙吧,是,不粗糙就用函数

int MultiByteToWideChar(
        UINT CodePage,                   // code page   | CP_ACP
        DWORD dwFlags,                   // character-type options   | MB_PRECOMPOSED
        LPCSTR lpMultiByteStr,          // string to map
        int cbMultiByte,                         // number of bytes in string
        LPWSTR lpWideCharStr,           // wide-character buffer
        int cchWideChar                            // size of buffer
);


int WideCharToMultiByte(
        UINT CodePage,                                    //code page    | CP_ACP
        DWORD dwFlags,                               //performance and mapping flags  | WC_COMPOSITECHECK
        LPCWSTR lpWideCharStr,                //wide-character string
        int cchWideChar,                                //number of chars in string
        LPSTR lpMultiByteStr,                            //buffer for new string
        int cbMultiByte,                                   //size of buffer
        LPCSTR lpDefaultChar,                  //default for unmappable chars   |NULL
        LPBOOL lpUsedDefaultChar         //set when default char used      |NULL
);

是的,排版是胡来的,能看清就行,我觉得说得够清楚了,只是那么多参数让人眼花缭乱,实在懒得去深究,所以我写了几个默认值,在 “|”后面,这是对像我这样的懒人和一些普通转换适用的,如果某高手看见了想指导我,好的,其实我也是一知半解。

基本上就这么多

应某人要求,加上最后一句 #Include <windows.h>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值