【整理】MFC下 各种字符串类型之间转换(MSDN及其他写法)
来源:互联网 发布:淘宝香港代购是真的吗 编辑:程序博客网 时间:2024/05/16 10:58
MSDN帮助文档
如何:在各种字符串类型之间进行转换
CString转换
UniCode 下 CString 转 char* 的方法
CString与char *互转总结
MFC中Cstring与char *的转换
LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR
各个字母代表意义
L 表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP 与P是等效的。
P 表示这是一个指针。
T 表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
STR 表示这个变量是一个字符串。
C 表示是一个常量,const。
LPTSTR 如果定义了 UNICODE 宏则 LPTSTR 被定义为 LPWSTR,否则 LPTSTR 被定义为 LPSTR
#ifdef UNICODE typedef LPWSTR LPTSTR; typedef LPCWSTR LPCTSTR;#else typedef LPSTR LPTSTR; typedef LPCSTR LPCTSTR;#endif
各个类型在多字节及Unicode下对应类型
/*类型MBCSUnicodeWCHARwchar_twchar_tLPSTRchar*char*LPCSTRconst char*const char*LPWSTRwchar_t*wchar_t*LPCWSTRconst wchar_t*const wchar_t*TCHARcharwchar_tLPTSTRTCHAR*(或char*)TCHAR* (或wchar_t*)LPCTSTRconst TCHAR*const TCHAR**/
转换方法
//LPWSTR->LPTSTR: W2T();//LPTSTR->LPWSTR: T2W();//LPCWSTR->LPCSTR: W2CT();//LPCSTR->LPCWSTR: T2CW();//ANSI->UNICODE: A2W();//UNICODE->ANSI: W2A();
WideCharToMultiByte和MultiByteToWideChar函数的用法
为了支持Unicode编码,需要多字节与宽字节之间的相互转换。这两个系统函数在使用时需要指定代码页,在实际应用过程中遇到乱码问题,然后重新阅读《Windows核心编程》,总结出正确的用法。
WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
常用的代码页由CP_ACP和CP_UTF8两个。
使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。
下面是代码实现:
WideCharToMultiByte的代码页用来标记与新转换的字符串相关的代码页。
MultiByteToWideChar的代码页用来标记与一个多字节字符串相关的代码页。
常用的代码页由CP_ACP和CP_UTF8两个。
使用CP_ACP代码页就实现了ANSI与Unicode之间的转换。
使用CP_UTF8代码页就实现了UTF-8与Unicode之间的转换。
下面是代码实现:
//1. ANSI to Unicodewstring ANSIToUnicode( const string& str ){ int len = 0; len = str.length(); int unicodeLen = ::MultiByteToWideChar( CP_ACP, 0, str.c_str(), -1, NULL, 0 ); wchar_t * pUnicode; pUnicode = new wchar_t[unicodeLen+1]; memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); ::MultiByteToWideChar( CP_ACP, 0, str.c_str(), -1, (LPWSTR)pUnicode, unicodeLen ); wstring rt; rt = ( wchar_t* )pUnicode; delete pUnicode; return rt; }//2. Unicode to ANSIstring UnicodeToANSI( const wstring& str ){ char* pElementText; int iTextLen; // wide char to multi char iTextLen = WideCharToMultiByte( CP_ACP, 0, str.c_str(), -1, NULL, 0,NULL, NULL ); pElementText = new char[iTextLen + 1]; memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) ); ::WideCharToMultiByte( CP_ACP, 0, str.c_str(), -1, pElementText, iTextLen, NULL, NULL ); string strText; strText = pElementText; delete[] pElementText; return strText;}//3. UTF-8 to Unicodewstring UTF8ToUnicode( const string& str ){ int len = 0; len = str.length(); int unicodeLen = ::MultiByteToWideChar( CP_UTF8, 0, str.c_str(), -1, NULL, 0 ); wchar_t * pUnicode; pUnicode = new wchar_t[unicodeLen+1]; memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t)); ::MultiByteToWideChar( CP_UTF8, 0, str.c_str(), -1, (LPWSTR)pUnicode, unicodeLen ); wstring rt; rt = ( wchar_t* )pUnicode; delete pUnicode; return rt; }//4. Unicode to UTF-8 string UnicodeToUTF8( const wstring& str ){ char* pElementText; int iTextLen; // wide char to multi char iTextLen = WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, NULL, 0, NULL, NULL ); pElementText = new char[iTextLen + 1]; memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) ); ::WideCharToMultiByte( CP_UTF8, 0, str.c_str(), -1, pElementText, iTextLen, NULL, NULL ); string strText; strText = pElementText; delete[] pElementText; return strText;}
0 0
- 【整理】MFC下 各种字符串类型之间转换(MSDN及其他写法)
- 在各种字符串类型之间进行转换(MSDN)
- MFC下的各种字符串类型和相互转换
- MFC下的各种字符串类型和相互转换
- MFC下的各种字符串类型和相互转换
- MFC下的各种字符串类型和相互转换
- SymbianC++各种类型之间的转换!!(整理)
- SymbianC++各种类型之间的转换!!(整理)
- 如何:在各种字符串类型之间进行转换(zz)
- 在各种类型字符串之间转换
- 在各种字符串类型之间进行转换
- 各种字符串类型之间进行转换
- 各种字符串类型之间的转换
- 各种字符串类型之间进行转换
- 如何:在十六进制字符串与数值类型之间转换(C# 编程指南MSDN)
- 字符串数据类型与其他类型之间的转换
- Symbian C++ 各种类型之间的转换!!(整理)
- Symbian C++ 各种类型之间的转换!!(整理)
- SQLServer创建数据库、登录账户、用户、并授权
- 实现高斯模糊
- Search a 2D Matrix I,II
- Android——map(百度地图)
- 安卓开源项目周报0315
- 【整理】MFC下 各种字符串类型之间转换(MSDN及其他写法)
- poj3617 Best Cow Line(贪心+字符串)
- 【C++】字符串最后一个单词的长度
- 基于Libsvm的图像分类
- 一些规范化前端书写建议
- nodejs构建项目
- 配置社区版spark运行在cdh yarn
- Qt 字体大小的计算
- SublimeText3配置