(转载)WCHAR与CHAR的转换

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

时间: 2024-09-28 00:32:43

(转载)WCHAR与CHAR的转换的相关文章

char数组转换cstring求教

问题描述 char数组转换cstring求教 例如char ch[4]={0x00,0x11,0x22,0x33}怎么转换成cstring输出00112233呢 解决方案 char r[8]; for (int i = 0; i < 4; i++) { r[i * 2] = (char)(ch[i] / 16 + '0'); r[i * 2 + 1] = (char)(ch[i] % 16 + '0'); } CString str = CString(r); 解决方案二: char r[8];

string与char*的转换(转载)

//string --> const char  string str2ch: str2ch.c_str();    //=============================   //string --> char * //先转为 const char , 然后 转char *    char TargetFile[strlen(TorrentFileNameDown.c_str())];     strcpy(TargetFile,TorrentFileNameDown.c_str()

关于Char* ,CString ,WCHAR*之间的转换问题

GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用往往是CString,用IO流读文件数据又得到char *.得益于网上牛人们的总结,我用到以下几种基本方法去实现三者间的转换: 代码段一:char * 转WCHAR *:::MultiByteToWideChar(CP_ACP,0,(const char *)res,int count,char * dest,int count);类似地,WCHAR *转cha

Char* ,CString ,WCHAR*之间的转换

关于Char* ,CString ,WCHAR*之间的转换问题GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用往往是CString,用IO流读文件数据又得到char *.得益于网上牛人们的总结,我用到以下几种基本方法去实现三者间的转换:char * 转WCHAR *:::MultiByteToWideChar(CP_ACP,0,(const char *)res,int count,char * dest,i

java中char和Character...的转换问题

问题描述 先上代码:publicclassTest{/*方法1*/publicstaticvoidf(Characterl,Character...args){System.out.println("Characterl,Character...args");}/*方法2*/publicstaticvoidf(Character...args){System.out.println("Character...args");}/*方法3*/publicstaticvo

VC中char和TCHAR的数据类型转换

char:计算机编程语言(c.c++.java.VFP等)中可容纳单个字符的一种基本数据类型. TCHAR:为了满足Unicode编码,对char的扩展,即_T("str")表示TCHAR类型 C++支持 两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹) ,这样对应的就有了两套字符串字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串 char和TCHAR类型 winnt.h头文件中:  

转换到 StoryBoard 的发布说明(Converting to Storyboards Release Notes)

转换到 StoryBoard 的发布说明(Converting to Storyboards Release Notes) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 转换到 StoryBo

C/C++误区四:char c = getchar();

许多初学者都习惯用 char 型变量接收 getchar.getc,fgetc 等函数的返 回值,其实这么做是不对的,并且隐含着足以致命的错误.getchar 等函数的返 回值类型都是 int 型,当这些函数读取出错或者读完文件后,会返回 EOF.EOF 是一个宏,标准规定它的值必须是一个 int 型的负数常量.通常编译器都会把 EOF 定义为 -1.问题就出在这里,使用 char 型变量接收 getchar 等函数的返 回值会导致对 EOF 的辨认出错,或者错把好的数据误认为是 EOF,或者把

【转载】条款29: 避免返回内部数据的句柄

请看面向对象世界里发生的一幕: 对象a:亲爱的,永远别变心! 对象b:别担心,亲爱的,我是const. 然而,和现实生活中一样,a会怀疑,"能相信b吗?" 同样地,和现实生活中一样,答案取决于b的本性:其成员函数的组成结构. 假设b是一个const string对象: ? 1 2 3 4 5 6 7 8 9 10 11 12 class string { public:   string(const char *value);        // 具体实现参见条款11   ~strin