作者:朱金灿 来源:http://blog.csdn.net/clever101 宽字符和窄字符的转换需求很经常会遇到,今天从网上找了两个函数,修改了一下,奉献给大家。 - #include <string>
- #include <assert.h>
-
- std::wstring toWideString( const char* pStr,int len)
- {
- assert(pStr) ;
- assert(len >= 0 || len == -1, _T("Invalid string length: ") << len ) ;
-
- // figure out how many wide characters we are going to get
- int nChars = MultiByteToWideChar( CP_ACP , 0 , pStr , len , NULL , 0 ) ;
- if ( len == -1 )
- -- nChars ;
- if ( nChars == 0 )
- return L"" ;
-
- // convert the narrow string to a wide string
- // nb: slightly naughty to write directly into the string like this
- std::wstring buf;
- buf.resize(nChars);
- ::MultiByteToWideChar(CP_ACP,0,pStr,len,const_cast<wchar_t*>(buf.c_str()),nChars);
-
- return buf ;
- }
-
- std::wstring toWideString(const std::string& strA)
- {
- const char* pStr = strA.c_str();
- int len = strA.length();
- return toWideString(pStr,len);
- }
-
- std::string toNarrowString( const wchar_t* pStr,int len)
- {
- // figure out how many narrow characters we are going to get
- assert(pStr) ;
- assert(len >= 0 || len == -1 , _T("Invalid string length: ") << len ) ;
-
- int nChars = WideCharToMultiByte( CP_ACP , 0 ,
- pStr , len , NULL , 0 , NULL , NULL ) ;
- if ( len == -1 )
- -- nChars ;
- if ( nChars == 0 )
- return "" ;
-
- // convert the wide string to a narrow string
- // nb: slightly naughty to write directly into the string like this
- std::string buf ;
- buf.resize(nChars);
- WideCharToMultiByte(CP_ACP,0,pStr,len,const_cast<char*>(buf.c_str()),nChars,NULL,NULL);
-
- return buf ;
- }
-
- std::string toNarrowString(const std::wstring& strW)
- {
- const wchar_t* pStr = strW.c_str();
- int len = strW.length();
- return toNarrowString(pStr,len);
- }
有问题或者更好意见的话请联系我。 参考文献:
|