char* 与wchar_t*类型之间的转换(代码实测可行)

来源:互联网 发布:淘宝网裤子女新款 编辑:程序博客网 时间:2024/05/18 19:19
相信会有很多人从VC++6.0环境转移到VS2010后会遇到各种各样的问题,其中一个便是各种字符类型转换的问题,这在6.0下面很少遇到,遇到了强转即可,而在VS2010下面是不可行的。在我遇到这个问题的时候,在网上搜索了很多的参考资料,但其代码都各有问题,对我来说,启发是有的,所以本文章就是解决各字符类型转换的绝好贴。好了,废话不多说,进入正题。
源码如下:

#include <Windows.h> 
#include<iostream>
using namespace std;


//类型转换
//function: wcharTochar
//purpose:WCHAR 、wchar_t、LPWSTR to char
void wcharTochar(const wchar_t *wchar, char *chr, int length)  
{  
WideCharToMultiByte( CP_ACP, 0, wchar, -1,  chr, length, NULL, NULL );  

//function: charTowchar
//purpose:char to WCHAR 、wchar_t、LPWSTR etc
void charTowchar(const char *chr, wchar_t *wchar)
{     
MultiByteToWideChar( CP_ACP, 0, chr,strlen(chr)+1, wchar, strlen(chr)+1);
}  
int main()
{
char chr[30]="char to wchar_t";
wchar_t *wch = (wchar_t *)malloc(sizeof(wchar_t) *20);  
charTowchar(chr, wch); 
wcout<<wch<<endl;
free(wch);
wch=NULL;


char chr1[30]={'0'};
wchar_t *wch1=L"wchar_t to char";
wcharTochar(wch1,chr1,sizeof(chr1));
cout<<chr1<<endl;


while(1);
}
函数一:
 //function: charTowchar
 //purpose:char to WCHAR 、wchar_t、LPWSTR etc


void charTowchar(const char *chr, wchar_t *wchar) 
{     
    MultiByteToWideChar( CP_ACP, 0, chr,strlen(chr)+1, wchar,strlen(chr)+1);  
}  


关于函数  MultiByteToWideChar()
1、功能说明:该函数映射一个字符串到一个宽字符(unicode)的字符串。由该函数映射的字符串没必要是多字节字符组。因为在VS2005以后,编码方式默认为Unicode,而传统上使用ANSI方式,所以需要转换;
2、函数原型:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
参数说明各位百度一下即可
函数二:
  //function: wcharTochar
  //purpose : WCHAR 、wchar_t、LPWSTR to char


void wcharTochar(const wchar_t *wchar, char *chr, int length)  
{  
    WideCharToMultiByte( CP_ACP, 0, wchar, -1, chr, length, NULL, NULL );  
}  


关于函数   WideCharToMultiByte
1、函数功能:该函数映射一个unicode字符串到一个多字节字符串。
2、函数原型及参数说明:
int WideCharToMultiByte(
UINT CodePage, //指定执行转换的代码页


DWORD dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符


LPCWSTR lpWideCharStr, //指定要转换为宽字节字符串的缓冲区


int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数


LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区


int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值


LPCSTR lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符


LPBOOL pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
);
原创粉丝点击