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 );
    }

  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/fuyanwen/p/3200886.html
Copyright © 2011-2022 走看看