C++的字符串转换和文件操作

字符串转换:

1.wstring转string

  
  
  
  
  1. string WCharToAnsi(LPCWSTR pwszSrc)  
  2. {  
  3.     int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);  
  4.     if (nLen<= 0) return std::string("");  
  5.     char* pszDst = new char[nLen];  
  6.     if (NULL == pszDst) return std::string("");  
  7.     WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);  
  8.     pszDst[nLen -1] = 0;  
  9.     std::string strTemp(pszDst);  
  10.     delete [] pszDst;  
  11.     return strTemp;  
  12. }  
  13.  
  14. string ws2s(wstring& inputws){ return WCharToAnsi(inputws.c_str()); } 

2.string转wstring

  
  
  
  
  1. std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)  
  2. {  
  3.     int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);  
  4.     if(nSize <= 0) return L"";  
  5.     WCHAR *pwszDst = new WCHAR[nSize+1];  
  6.     if( NULL == pwszDst) return L"";  
  7.     MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);  
  8.     pwszDst[nSize] = 0;  
  9.     if( pwszDst[0] == 0xFEFF) // skip Oxfeff  
  10.         for(int i = 0; i < nSize; i ++)   
  11.             pwszDst[i] = pwszDst[i+1];   
  12.     wstring wcharString(pwszDst);  
  13.     delete pwszDst;  
  14.     return wcharString;  

3.wstring转UTF8

 

  
  
  
  
  1. string WCharToUTF8(wstring strUnicode)     
  2. {     
  3.     //MessageBox(strUnicode);     
  4.     int ilen = WideCharToMultiByte(CP_UTF8, 0, strUnicode.c_str(), -1, NULL, 0, NULL, NULL);      
  5.     char *szUtf8Temp=new char[ilen + 4];     
  6.     memset(szUtf8Temp, 0, ilen + 4);      
  7.     szUtf8Temp[0] = 0xEF;   
  8.     szUtf8Temp[1] = 0xBB;   
  9.     szUtf8Temp[2] = 0xBF;  
  10.     WideCharToMultiByte (CP_UTF8, 0, strUnicode.c_str(), -1, &szUtf8Temp[3], ilen, NULL,NULL);      
  11.     ilen += 3;  
  12.     szUtf8Temp[ilen - 1] = 0;  
  13.     std::string strTemp(szUtf8Temp);  
  14.     delete [] szUtf8Temp;    
  15.     return strTemp;     
  16. }   

4.UTF8转wstring

  
  
  
  
  1. wstring UTF8ToWChar(LPCSTR pszSrc, int nLen)  
  2. {  
  3.     int nSize = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pszSrc, nLen, 0, 0);  
  4.     if(nSize <= 0) return L"";  
  5.     WCHAR *pwszDst = new WCHAR[nSize+1];  
  6.     if( NULL == pwszDst) return L"";  
  7.     MultiByteToWideChar(CP_UTF8, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);  
  8.     pwszDst[nSize] = 0;  
  9.     if( pwszDst[0] == 0xFEFF) // skip Oxfeff  
  10.         for(int i = 0; i < nSize; i ++)   
  11.             pwszDst[i] = pwszDst[i+1];   
  12.     wstring wcharString(pwszDst);  
  13.     delete pwszDst;  
  14.     return wcharString;  

文件操作:

1.格式化文件大小

  
  
  
  
  1. #include <sstream>  
  2. #include <iomanip>  
  3. #ifdef UNICODE  
  4. #define tstring std::wstring  
  5. #define tostringstream std::wostringstream  
  6. #else  
  7. #define tstring std::string  
  8. #define tostringstream std::ostringstream  
  9.  
  10. #endif  
  11.  
  12. std::wstring FormatFileSize( size_t nSize )  
  13. {  
  14.     tostringstream oss;  
  15.     oss<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);  
  16.  
  17.     if (nSize > 1024*1024*1024)  
  18.         oss << (double)nSize/1024/1024/1024 <<  tstring(_T("GB"));  
  19.     else if (nSize > 1024*1024)  
  20.         oss << (double)nSize/1024/1024 <<  tstring(_T("MB"));  
  21.     else if (nSize > 1024)  
  22.         oss << (double)nSize/1024 <<  tstring(_T("KB"));  
  23.     else if (nSize > 0)  
  24.         oss << nSize << tstring(_T("B"));  
  25.     else 
  26.         oss << tstring(_T("未知"));  
  27.     return oss.str();  

2.获取文件名和扩展名

  
  
  
  
  1. // 获取文件名  
  2. wstring GetFileName(wstring strFilename)  
  3. {  
  4.     int npos = strFilename.rfind('\\');  
  5.     return strFilename.substr(npos == string::npos ? strFilename.length() : npos+1);  
  6. }  
  7.  
  8. // 获取扩展名  
  9. wstring GetFileExt(wstring strFilename)  
  10. {  
  11.     int npos = strFilename.rfind('.');  
  12.     return strFilename.substr(npos == string::npos ? strFilename.length() : npos+1);  

 

你可能感兴趣的:(字符串)