Unicode下字符串與整型等的格式轉換【轉】
2013年10月01日 ⁄ 綜合 ⁄ 共 1329字 ⁄ 字號 小 中 大 ⁄ 評論關閉
Unicode下字符串與整型等的格式轉換
一、int等 轉 CString
int i;
CString msg= _T("");
msg.Format( _T("%d"), i);
同理對於long、double、char等適用.注意:必須適用_T()函數。
二、CString 轉 int
CString msg = _T("123");
int i = _ttoi( msg );
三、CString 轉 long
CString msg = _T("123");
long i = _tcstol( msg , 0 , 10 );
使用_tcstoul()或者_tcstol(),它們都能把字符串轉化成任意進制的長整數(如二進制、八進制、十進制或十六進制),不同點在於前者轉化後的數據是無符號的(unsigned),而後者相反。
四、CString 轉 double
CString msg = _T("123");
double i = _tcstod( msg , 0 );
或
double i = _wtof( msg , 0 );
其他,
// 把寬字符轉化為ANSI字符串
WideCharToMultiByte( CP_ACP, 0, lpcwStr, -1, lpStr, sizeof(lpStr), NULL, NULL );
// 把ANSI字符串轉化為寬字符
MultiByteToWideChar( CP_ACP, 0, lpcStr, -1, lpwStr, sizeof(lpwStr) );
為支持Unicode做準備,除個別必須使用 char 或 char* 的地方外,
其它地方請依照如下標準:
1.字符串類型盡量用CString
2.字符類型使用 TCHAR
3.字符串數組用 TCHAR[]
4.字符串指針用 TCHAR*
5.常量字符串指針用 const TCHAR*
6.字符串常量和字符常量加宏 _T
特別的:
1>CString::Format(_T("..."),...)//要加_T
2>LPTSTR 等等被多次嵌套定義過的宏盡量少用,用基礎類型 const TCHAR*(或TCHAR*)替代;
3>為TCHAR*類型指針分配 N-1 個字符的空間: TCHAR* pbuffer = new TCHAR[ N*sizeof(TCHAR) ];
常用字符串函數,須使用支持Unicode/Ansi的宏函數替換前者:
Ansi字符串函數 Unicode/Ansi宏函數 功能說明
strcpy _tcscpy 字符串拷貝
strcat _tcscat 字符串連接
strlen _tcslen 求字符串長度
strcmp _tcscmp 字符串比較
atof _tcstod (注) 字符串轉換為double
atoi _ttoi 字符串轉換為int
註:上表中 _tcstod 和 atof用法不同,不能直接替換。
LPCTSTR 使用 UELPCTSTR 代替
std::string 使用 UeStdString 代替
這個需要加ShareHeader.h頭文件
#ifdef UNICODE
typedef std::wstring UeStdString;
#define UELPCSTR LPCWSTR
#else
typedef std::string UeStdString;
#define UELPCSTR LPCTSTR
#endif