zoukankan      html  css  js  c++  java
  • 【原创】 VC++各种字符串类型转换

    包括VC编程时常用的Unicode和Char互转,CString和std::string互转, 其他的转换可以由这个几个转化间接得到

    // convert.h

     1  
     2 #include <string>
     3 
     4 #ifndef  _CONVERT_H_
     5 #define  _CONVERT_H_
     6 
     7  
     8 class CConvert
     9 {
    10 public:
    11     CConvert(void);
    12     virtual ~CConvert(void);
    13 
    14     static int Ansi2Unicode(__in const char* pSrc,  wchar_t *pDst, __in size_t nChsOfDst); 
    16 
    17     static int Unicode2Ansi(__in const wchar_t * pSrc, char* pDst, __in size_t nBytesOfDst);  
    20 static std::string CString2String(CString str); 21 22 23 static CString String2CString(const std::string& str); 24 }; 25 26 #endif

     //convert.cpp

     1 #include "StdAfx.h"
     2 #include "Convert.h"
     3 
     4 
     5 CConvert::CConvert(void)
     6 {
     7 }
     8 
     9 
    10 CConvert::~CConvert(void)
    11 {
    12 }
    13 
    14 int CConvert::Ansi2Unicode(__in const char* pSrc,  wchar_t *pDst, __in size_t nChsOfDst)
    15 { 
    16     if (NULL == pDst)
    17     {
    18         int nChsOfDstNeed = MultiByteToWideChar(CP_ACP, 0, pSrc, -1, NULL, 0); //unicdoe缓冲区需要的字符数,包括\0; 
    19         return nChsOfDstNeed;
    20     }
    21 
    22 
    23     return MultiByteToWideChar(CP_ACP, 0, pSrc, -1, pDst, nChsOfDst);  
    24 }
    25 
    26 
    27 int CConvert::Unicode2Ansi(__in const wchar_t * pSrc, char* pDst, __in size_t nBytesOfDst)
    28 {
    29     if (NULL == pDst)
    30     {
    31         int nBytesOfDstNeed = WideCharToMultiByte(CP_ACP, 0, pSrc, -1, NULL, 0, NULL, NULL); //返回需要写的字节数,包括末尾的\0;
    32         return nBytesOfDstNeed;
    33     }
    34 
    35     return WideCharToMultiByte(CP_ACP, 0, pSrc, -1, pDst, nBytesOfDst, NULL, NULL); //返回需要写的字节数,包括末尾的\0; 
    36 }
    37 
    38 
    39 std::string CConvert::CString2String(CString str)
    40 {
    41     int len = str.GetLength();
    42     TCHAR* pSrc = str.GetBuffer(len); 
    43 
    44     if (NULL == pSrc)
    45     {
    46         return NULL;
    47     }
    48 
    49     int nBytesOfDst = Unicode2Ansi(pSrc, NULL, 0);
    50     if (0 == nBytesOfDst)
    51     {
    52         return NULL;
    53     }
    54 
    55     char *pDst = new char[nBytesOfDst / sizeof(char)];
    56     memset(pDst, 0, nBytesOfDst);
    57 
    58     Unicode2Ansi(pSrc, pDst, nBytesOfDst);
    59 
    60     std::string strRet(pDst);
    61     delete[] pDst;
    62 
    63     return strRet; 
    64 }
    65 
    66 
    67 CString CConvert::String2CString(const std::string& str)
    68 {
    69     CString strRet(str.c_str());
    70 
    71     return strRet;
    72 }

    //使用代码实例

     1 void CMFCMacrosDlg::Ansi2Unicode()
     2 { 
     3     CConvert obj;
     4     
     5     char* pSrc = "cuihao";
     6     int nChsOfDst = obj.Ansi2Unicode(pSrc, NULL, 0); 
     7     wchar_t *pDst = new wchar_t[nChsOfDst]; 
     8     nChsOfDst = obj.Ansi2Unicode(pSrc, pDst, nChsOfDst);
     9 
    10     MessageBox(CString(pDst));
    11     
    12     delete[] pDst;
    13 }
    14 
    15 
    16 void CMFCMacrosDlg::Unicode2Ansi()
    17 {
    18     // TODO: 在此添加控件通知处理程序代码;
    19     CConvert obj;
    20 
    21     wchar_t *pSrc = L"cuihao";
    22 
    23     int nBytesOfDst = obj.Unicode2Ansi(pSrc, NULL, 0);
    24 
    25     char *pDst = new char[nBytesOfDst / sizeof(char)];  //包含\0
    26 
    27     obj.Unicode2Ansi(pSrc, pDst, nBytesOfDst);
    28 
    29     MessageBox(CString(pDst));
    30 
    31     delete[] pDst;
    32 }
    33 
    34 
    35 void CMFCMacrosDlg::CString2String()
    36 {
    37     // TODO: 在此添加控件通知处理程序代码;
    38 
    39     CString str("cuihao");
    40 
    41     CConvert obj;
    42      
    43     std::string strInfo = obj.CString2String(str);
    44     
    45     MessageBox(obj.String2CString(strInfo));
    46 }
    47 
    48 
    49 void CMFCMacrosDlg::String2CString()
    50 { 
    51     std::string str("cuihao");
    52 
    53     CConvert obj;
    54     CString strRet = obj.String2CString(str); 
    55 }
  • 相关阅读:
    Java
    Java
    Java
    Java
    Java
    Java
    Java
    Java
    JSON
    正则表达式
  • 原文地址:https://www.cnblogs.com/cuish/p/3024325.html
Copyright © 2011-2022 走看看