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);
}
#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: 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
);
//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
);
- char* 与wchar_t*类型之间的转换(代码实测可行)
- char与wchar_t之间的转换
- char*与wchar_t*之间的转换
- wchar_t*与char*之间的转换
- wchar_t与char类型的转换
- 也谈C++中char*与wchar_t*之间的转换
- C++中char*与wchar_t*之间的转换
- 谈C++中char*与wchar_t*之间的转换
- C++中char*与wchar_t*之间的转换
- 也谈C++中char*与wchar_t*之间的转换
- C++中char*与wchar_t*之间的转换
- C++中char*与wchar_t*之间的转换
- 也谈C++中char*与wchar_t*之间的转换
- 也谈C++中char*与wchar_t*之间的转换
- 也谈C++中char*与wchar_t*之间的转换
- C++中char*与wchar_t*之间的转换
- 也谈C++中char*与wchar_t*之间的转换
- 也谈C++中char*与wchar_t*之间的转换
- Section 7 - Net,CSS and Dom tabs
- 汉字截断问题
- (DS1.5.4)POJ 1581 A Contesting Decision(结构体排序)
- Java对象的内存模型
- 如何按日期生成apache日志文件及限制apache日志文件大小
- char* 与wchar_t*类型之间的转换(代码实测可行)
- HDU 2594 Simpsons’ Hidden Talents KMP
- Lightoj 1033 数位DP
- platform总线、设备与驱动
- 如何判断一个链表是否有环? 2、如果链表为存在环,如果找到环的入口点?
- 大学生活
- Visual Studio Ultimate 2013
- sort基础用法
- uva10943