现在的位置: 首页 > 综合 > 正文

Unicode下字符串与整型等的格式转换

2013年01月17日 ⁄ 综合 ⁄ 共 1279字 ⁄ 字号 评论关闭

一、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 ); 

其他,

// 把宽字符转化为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

抱歉!评论已关闭.