Unicode下字符经常需要转化,还是比较麻烦的。
但是Unicode支持跨平台 而且系统内部也使用Unicode 因此我们一般仍需要使用该编码方式。
Unicode即为宽字节,在宽字节中,英文和中文都占两个字节。而多字节中,英文占一个字节,中文为两个。单字节中每个都是占一个字节,如ASCII码。
记录部分转化方式,以后会用到。
1.Unicode转为多字节
方法:WidecharToMultiByte()
如
char * pathname= new char[MAX_PATH] ; WCHAR *pathname_L= new WCHAR[MAX_PATH]; GetCurrentDirectory(MAX_PATH,pathname_L);//获取当前工作路径 WideCharToMultiByte( CP_ACP, 0, pathname_L, -1, pathname, MAX_PATH, NULL, NULL );
2.CString 转为string
CString cstr = _T("xxxx"); string str = cstr .GetBuffer(0);
3.int转为CString
int num = 1; CString cstr; cstr.Format(_T("%d"),num);
4. CString转为char*
LPCTSTR为TCHAR *
LPTSTR为 const TCHAR*
而在Unicode下,TCHAR相当于wchar_t。因此,LPTSTR为wchar_t*。 LPCTSTR相当于const wchar_t*
在Ansi下,TCHAR相当于char。因此,LPTSTR为char*,LPCTSTR相当于const char*
Ansi下第一种方法 可以强制转化,用宏LPCTSTR和LPTSTR 。但并不介意,容易出现乱码。
<pre name="code" class="cpp">CString cstr; const char *ch = (LPTSTR)(LPCTSTR)cstr;
unicode下 ,第一种方法可用WidecharToMultiByte()
第二种方法可用
CString str = _T("xxx"); USES_CONVERSION; //调用函数,T2A和W2A均支持ATL和MFC中的字符转换 char * pFileName = T2A(str); //char * pFileName = W2A(str); //也可实现转换
这种方法需加头文件#include <afxpriv.h>
用uses_convesion时要注意,该方法占用一定内存,在函数结束时才释放。因此,若需要在一个大循环内频繁调用该函数,则可能导致内存崩溃。可以通过单独建立一个转化函数来解决该问题。
5 const char*转为char*
const char * cc = const_char<char *>(c.c_str());//c为const char*
时间: 2024-10-03 04:30:12