常用数据类型转字符串
一、刚开始学习编程时常常为其他数据类型转字符串而烦恼。不难,就是繁琐。
现在总结了些小技巧,和大家分享,希望对大家有所帮助。
二、我们最熟悉的springf,功能强大,但不够安全,而且也很繁琐(哈哈!也许很多高手会反驳)
三、itoa函数,不错的选择,我以前用得最多啦!但能否再简单点呢?这个的可读性不好。
TCHAR buf[11]; _itot(num,buf,10); // #include <TCHAR.H> |
四、更好的选择:
/**************************************************************************** 1.函数 string ItoString(int val) + 宏定义 INT_TO_STR(X) 实现int值简单的转TCHAR* 2.需要 #include <string> 3.调用示例: int a=45; ::MessageBox(m_hWnd,INT_TO_STR(a),NULL,MB_OK); ****************************************************************************/ //兼容ANSI和UNICODE #ifdef _UNICODE #define __string wstring #else #define __string string #endif std::__string _Int_to_String(int val) { TCHAR buffer[11]; _itot(val,buffer,10); return std::__string(buffer); } #define INT_TO_STR(X) _Int_to_String(X).c_str() |
五、更通用的方法。
/**************************************************************************** 1.常用数据类型转换成字符串 2.使用了一个模版函数和宏定义ALL_TO_STR 3.依靠ostringstream的数据转换功能。 4.需包含头文件 #include <string> 和 #include <sstream> 5.调用示例: TCHAR buf[100]=_T("Impossible is nothing"); TCHAR buf2[100]=_T("this is multi line/r/nfirst line/r/nsecond line"); int a=45; double b=67.45; double c=847.424;short d=324; bool e=true; ::MessageBox(m_hWnd,ALL_TO_STR(buf),NULL,MB_OK); ::MessageBox(m_hWnd,ALL_TO_STR(a),NULL,MB_OK); ::MessageBox(m_hWnd,ALL_TO_STR(b),NULL,MB_OK); ::MessageBox(m_hWnd,ALL_TO_STR(c),NULL,MB_OK); ::MessageBox(m_hWnd,ALL_TO_STR(d),NULL,MB_OK); ::MessageBox(m_hWnd,ALL_TO_STR(e),NULL,MB_OK); ****************************************************************************/ //兼容ANSI和UNICODE #ifdef _UNICODE #define __string wstring #define __ostringstream wostringstream #else #define __string string #define __ostringstream ostringstream #endif template <class T> std::__string __OutputString(T val) { std::__ostringstream FormatString; FormatString<<val; return std::__string(FormatString.str()); } #define ALL_TO_STR(X) __OutputString(X).c_str() |
以上方法在我的另外两篇文章中都有使用到
http://blog.csdn.net/jacky_qiu/archive/2010/11/04/5986089.aspx
http://blog.csdn.net/jacky_qiu/archive/2010/12/02/6051517.aspx