| > おとなしく WideCharToMultiByte でも使っておくが吉みたい。
やってみた。あんまおとなしくなかったw
#include <iostream>
#include <string>
#include <cassert>
#include <windows.h>
int main() {
System::String^ input = gcnew System::String(L"日本ちゃちゃちゃ");
std::string result;
int codepage = 932; // shift_jis
if ( input->Length != 0 ) {
// wideなmanaged配列を手に入れて
array<wchar_t>^ winput = input->ToCharArray();
// アドレスをピン留めし
pin_ptr<wchar_t> ptr(&winput[0]);
// 変換後の長さを調べて
int size = WideCharToMultiByte(codepage, 0, ptr, winput->Length, 0, 0, 0, 0);
assert( size != 0 );
// 領域を確保して
result.assign(size, '\0');
// ほんでもって変換、と。
size = WideCharToMultiByte(codepage, 0, ptr, winput->Length, &result[0], size, 0, 0);
assert( size != 0 );
}
std::cout << result << std::endl;
}
codepageが選べるってオマケがついたので許しておくれね。
|