// wchartToChar.cpp : コンソール アプリケーションのエントリ // ポイントを定義します。 // #include "stdafx.h" #include // wcstombs_s #include // setlocale #include // strlen #include int wchartToChar ( const wchar_t* pSrc , char* pDest , const size_t iDestSize ); int charToWchart ( const char* pSrc , wchar_t* pDest , const size_t sDestSize ); int _tmain( int argc, _TCHAR* argv[] ) { // ロケール指定 setlocale( LC_ALL, "Japanese" ); wchar_t* wcBuf = L"wchar_t メッセージ"; printf( "wchar_t:[%S] len:%d byte:%d\n" , wcBuf , wcslen( wcBuf ) , sizeof( wcBuf ) ); // %sじゃダメ // wchar_t* -> char* char cBuf[(13+1)*2]; wchartToChar( wcBuf, cBuf, sizeof( cBuf ) ); printf( "char :[%s] len:%d byte:%d\n" , cBuf , strlen( cBuf ) , sizeof( cBuf ) ); // char* -> wchar_t* wchar_t wcBuf2[13+1]; charToWchart( cBuf, wcBuf2, sizeof( wcBuf2 ) ); printf( "wchar_t:[%S] len:%d byte:%d\n" , wcBuf2 , wcslen( wcBuf2 ) , sizeof( wcBuf2 ) ); getchar(); return 0; } //============================================================== // [概要] // wchar_t* から char* への変換を行う // [引数] // pSrc const wchar_t* 変換するwchar_t型の文字列。 // pDest char* 変換結果のchar型文字列。 // sDestSize const size_t pDestのサイズ // [戻り値] // int 0:正常,1:異常 //============================================================== int wchartToChar ( const wchar_t* pSrc , char* pDest , const size_t sDestSize ) { size_t iReturnValue; errno_t ret = wcstombs_s( &iReturnValue , pDest , sDestSize , pSrc , _TRUNCATE ); if ( ret != 0 ) { printf( "wcstombs_s error!! ret=%d\n", ret ); return 1; } printf( "wcstombs_s return value:%d\n" , iReturnValue ); return 0; } //============================================================== // [概要] // char* から wchar_t* への変換を行う // [引数] // pSrc const char* 変換するchar型の文字列。 // pDest wchar_t* 変換結果のwchar_t型文字列。 // sDestSize const size_t pDestのサイズ // [戻り値] // int 0:正常,1:異常 //============================================================== int charToWchart ( const char* pSrc , wchar_t* pDest , const size_t sDestSize ) { size_t iReturnValue; errno_t ret = mbstowcs_s( &iReturnValue , pDest , sDestSize , pSrc , _TRUNCATE ); if ( ret != 0 ) { printf( "mbstowcs_s error!! ret=" ); switch( ret ) { case EINVAL: printf( "EINVAL\n" ); break; case ERANGE: printf( "ERANGE\n" ); break; case EILSEQ: printf( "EILSEQ\n" ); break; default: printf( "other[%d]\n", ret ); break; } return 1; } printf( "wcstombs_s return value:%d\n" , iReturnValue ); return 0; }