最近将一个多字节字符集代码改造为unicode字符集代码。但有一个问题比较烦人。就是常量字符串的改动。比如
TCHAR szName[] = "Jim", 需要改为
TCHAR szName[] = _T("Jim");   由于代码中常量字符串中较多,需要改动的地方不少。怎么改动呢?我想需不需要在“快速替换”对话框中使用什么正则表达式呢。我对正则表达式也不熟啊。编译器是: VS 2005+ sp1.

解决方案 »

  1.   

    正则替换Find:
    ".*"Replace with:
    _T(\0)然后点替换,不过这这个模式没有办法区分
    TCHAR szName[] = "Jim", 

    #include "xxx.h"因此你不能replace all,而只能一个一个的看到替换,发现是应该替换的才替换
      

  2.   

    http://topic.csdn.net/u/20090416/11/a9b4c762-19e7-4b21-984a-a4db2061e47c.html
      

  3.   

    ======================vc6.0====================================
    char *szText = "我asd们的大中国qqwssadd";
    size_t nLen = strlen(szText);
    size_t nLenW = ::MultiByteToWideChar(CP_ACP,0,(const char *)szText,int(nLen),NULL,0);
    WCHAR *wszText = new WCHAR[nLenW+1];
    ::MultiByteToWideChar(CP_ACP,0,(const char *)szText,int(nLen),wszText,int(nLenW));
    wszText[nLenW] = L'\0';
    MessageBoxExW(m_hWnd, wszText, L"123456", 0, 0);======================vc2005===============================
    WCHAR* CClientDlg::StrToWchar(CString strSrc)
    {
    size_t nLen = strSrc.GetLength()+1;
    char *szText = new char[nLen];
    sprintf_s(szText, nLen, "%s", strSrc); 
    size_t nLenW = ::MultiByteToWideChar(CP_ACP,0,(const char *)szText,int(nLen),NULL,0);
    WCHAR *wszText = new WCHAR[nLenW+1];
    ::MultiByteToWideChar(CP_ACP,0,(const char *)szText,int(nLen),wszText,int(nLenW));
    wszText[nLenW] = L'\0';
    return wszText;
    }
    自己变下,也能从char*转
      

  4.   

    可以使用说 .工程项目属性中常规.字符集.设置为使用"多字符集"或者UNICODE.....
      

  5.   


    用_T不保险,因为_T是一种“适配宏”,即:用它修饰的字符串既可以被用asc方式保存,也可以用unicade方式
    保存,这要看编译环境的字符集了,如果它的字符集是asc的,那字符就会被用asc方式保存。如果确定要将字符转换为unicode字符集代码,建议使用"L",这样不论在任何字符集编译环境下,字符都会被用unicade方式保存。
      

  6.   


        这个不用了,《Windows核心编程》就有。单个转换没什么意义的。我的任务是要把整个工程的代码进行转换。
      

  7.   

    下载PilotEdit 2.5, http://topic.csdn.net/u/20090512/21/99628cbd-3c70-4d29-91ff-1962f01e7a7c.html用下面的正则表达式查找替换:
    查找:{jmp|djnz|cjne}?*[, ]?[a-z|A-Z|0-9|_]+[\t ]*$
    替换为:%04
    假设原始文件为:
    #include "test.h"
    TCHAR szName[] = "Jim";
    TCHAR szName2[] = "Jim2\"test";
    char szName3[] = "Jim3";
       char szName3[] = "Jim3";
    TCHAR szName4[] = _T("Jim");
    TCHAR szName5[] =    _T("Jim")  ;
    sprintf(szName5, "TCHAR szName=\"\"")  ; 将被转换为:
    #include "test.h"
    TCHAR szName[] = _T("Jim");
    TCHAR szName2[] = _T("Jim2\"test");
    char szName3[] = _T("Jim3");
       char szName3[] = _T("Jim3");
    TCHAR szName4[] = _T("Jim");
    TCHAR szName5[] =    _T("Jim")  ;
    sprintf(szName5, "TCHAR szName=\"\"")  ;
      

  8.   

    下载PilotEdit 2.5, http://topic.csdn.net/u/20090512/21/99628cbd-3c70-4d29-91ff-1962f01e7a7c.html用下面的正则表达式查找替换:
    查找:^[\t ]*(TCHAR|char)?*=[\t ]*"*"[\t ]*;[\t ]*$
    替换为:%01TCHAR%03%04%05_T(%06%07%08)%09%10%11
    假设原始文件为:
    #include "test.h"
    TCHAR szName[] = "Jim";
    TCHAR szName2[] = "Jim2\"test";
    char szName3[] = "Jim3";
      char szName3[] = "Jim3";
    TCHAR szName4[] = _T("Jim");
    TCHAR szName5[] =    _T("Jim")  ;
    sprintf(szName5, "TCHAR szName=\"\"")  ;将被转换为:
    #include "test.h"
    TCHAR szName[] = _T("Jim");
    TCHAR szName2[] = _T("Jim2\"test");
    TCHAR szName3[] = _T("Jim3");
      TCHAR szName3[] = _T("Jim3");
    TCHAR szName4[] = _T("Jim");
    TCHAR szName5[] =    _T("Jim")  ;
    sprintf(szName5, "TCHAR szName=\"\"")  ;