zoukankan      html  css  js  c++  java
  • wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString 以及system("command")

    转载:http://blog.csdn.net/chocolateconanlan/article/details/4058868

    wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString….

    一些转换函数,主要针对宽字符。字符串是根本啊,要好好掌握了


    #include <string>
    // 使用CString必须使用MFC,并且不可包含<windows.h>
    #define _AFXDLL
    #include <afx.h>
    using namespace std;
    //———————————————————————————-
    //将 单字节char* 转换为 宽字节 wchar*
    inline wchar_t* AnsiToUnicode( const char* szStr )
    {
    int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );
    if (nLen == 0)
    {
       return NULL;
    }
    wchar_t* pResult = new wchar_t[nLen];
    MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );
    return pResult;
    }
    //———————————————————————————-
    // 将 宽字节wchar_t* 转换 单字节char*
    inline char* UnicodeToAnsi( const wchar_t* szStr )
    {
    int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
    if (nLen == 0)
    {
       return NULL;
    }
    char* pResult = new char[nLen];
    WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
    return pResult;
    }
    //———————————————————————————-
    // 将单字符 string 转换为宽字符 wstring
    inline void Ascii2WideString( const std::string& szStr, std::wstring& wszStr )
    {
    int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );
    wszStr.resize(nLength);
    LPWSTR lpwszStr = new wchar_t[nLength];
    MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );
    wszStr = lpwszStr;
    delete [] lpwszStr;
    }
    //———————————————————————————-
    int _tmain(int argc, _TCHAR* argv[])
    {
    char*   pChar = “我喜欢char”;
    wchar_t* pWideChar = L”我讨厌wchar_t”;
    wchar_t   tagWideCharList[100] ;
    char   ch = ‘A’;
    char   tagChar[100] = {NULL};
    CString   cStr;
    std::string str;

    // 注:设置语言环境以便输出WideChar
    setlocale(LC_ALL,”chs”);

    // 注: char* 转换 wchar_t*
    // 注: wchar_t 未重载 << ,所以不可使用 cout << 输出
    pWideChar = AnsiToUnicode( pChar );
    // 注:printf(”%ls”) 和 wprintf(L”%s”) 一致
    printf( “%ls/n”, pWideChar );

    // 注:wchar_t* 转换 wchar_t[]
    wcscpy ( tagWideCharList, pWideChar );
    wprintf( L”%s/n”, tagWideCharList );

    // 注:wchar_t[] 转换 wchar_t*
    pWideChar = tagWideCharList;
    wprintf( L”%s/n”, pWideChar );

    // 注:char 转换 string
    str.insert( str.begin(), ch );
    cout << str << endl;

    // 注:wchar_t* 转换 string
    pWideChar = new wchar_t[str.length()];
    swprintf( pWideChar, L”%s”, str.c_str());
    wprintf( L”%s/n”, pWideChar );

    // 注:string 转换 char*
    pChar = const_cast<char*>(str.c_str());
    cout << pChar << endl;

    // 注:char* 转换 string
    str = std::string(pChar);
    // 注: cout 的 << 重载了string, 若printf 的话必须 printf(”%s”, str.c_str());
    //   而不可 print( “%s”, str ); 因为 str 是个 string 类
    cout << str << endl;

    // 注:string 转换 char[]
    str = “无聊啊无聊”;
    strcpy( tagChar, str.c_str() );
    printf( “%s/n”, tagChar );

    // 注:string 转换 CString;
    cStr = str.c_str();

    // 注:CString 转换 string
    str = string(cStr.GetBuffer(cStr.GetLength()));

    // 注:char* 转换 CString
    cStr = pChar;

    // 注:CString 转换 char*
    pChar = cStr.GetBuffer( cStr.GetLength() );

    // 注:CString 转换 char[]
    strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));

    // 注:CString 转换 wchar_t*
    pWideChar = cStr.AllocSysString();
    printf( “%ls/n”, pWideChar );
    }

  • 相关阅读:
    Tomcat集群Cluster实现原理剖析[转] 文件同步
    看到一个比较好的jbpm教程,感谢一下
    vi显示行号
    安装apache2参数详解
    Windows平台下查看占用端口的程序
    struts2中使用token避免重复提交
    在window下安装开源的中文界面的项目管理软件Redmine
    Java中数据存储
    求素数算法网摘
    模式工程化实现及扩展读书笔记——设计原则
  • 原文地址:https://www.cnblogs.com/fuyanwen/p/3200886.html
Copyright © 2011-2022 走看看