(转载)WCHAR与CHAR的转换

来源:互联网 发布:淘宝的便宜苹果手机 编辑:程序博客网 时间:2024/05/15 16:18

(转载) 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>

原创粉丝点击