string変換する為には、WideCharToMultiByte()関数を使用します。第1引数にCP_OEMCPを渡す事でUCS2文字列を扱う事ができます。
#include <stdio.h> #include <tchar.h> #include <locale.h> #include <string> #include <iostream> #include <windows.h> /* wstringをstringへ変換 */ std::string WStringToString ( std::wstring oWString ) { // wstring → SJIS int iBufferSize = WideCharToMultiByte( CP_OEMCP, 0, oWString.c_str() , -1, (char *)NULL, 0, NULL, NULL ); // バッファの取得 CHAR* cpMultiByte = new CHAR[ iBufferSize ]; // wstring → SJIS WideCharToMultiByte( CP_OEMCP, 0, oWString.c_str(), -1, cpMultiByte , iBufferSize, NULL, NULL ); // stringの生成 std::string oRet( cpMultiByte, cpMultiByte + iBufferSize - 1 ); // バッファの破棄 delete [] cpMultiByte; // 変換結果を返す return( oRet ); } int _tmain ( int argc , _TCHAR* argv[] ) { /* ロケールを日本に設定 これを設定するだけで、標準出力に日本語が表示される ようになります。 */ setlocale( LC_ALL, "Japanese" ); // wstringをstringへ変換 std::string str = WStringToString( L"あいうえお¥n" ); // 標準出力へ出力する std::cout << str << std::endl; // 正常終了 return( 0 ); }
あいうえお