首页 > 代码库 > 字符之间的转化

字符之间的转化

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*






字符之间的转化