System::Stringからstd::stringへの変換

C++/CLIでは、Stringクラスってのがあります。

今まで使っていたコードを利用しようと思うと、char* やら std::string やらがコードに出てくることになるんで、 System::String から std::string とか、 std::string から System::String への変換を行う必要があります。

...まだ C++/CLI の文化になじんでないんで、どうすりゃいいのかわからずに困ったのでメモとして残しときます。

まずは、std::string から System::Stringへの変換

/// std::string -> System::String への変換
String^ ToSystemString(
                       const std::string& i_src,
                       System::Text::Encoding^ i_encoding
                       )
{
    return  gcnew System::String( i_src.data(), 0, i_src.size(), i_encoding );
}

つぎに、System::Stringからstd::stringへの変換

/// System::String^ -> std::string の変換
std::string ToStdString(
                        String^ i_src,
                        System::Text::Encoding^ i_encoding
                        )
{
    std::string a_str;
    if( i_src != nullptr &&  i_src->Length > 0 ){
        array< Byte >^ a_array = System::Text::Encoding::Convert(
                                                                 System::Text::Encoding::Unicode, // 変換元エンコーディング
                                                                 i_encoding,          // 変換先エンコーディング
                                                                 System::Text::Encoding::Unicode->GetBytes( i_src ));
        pin_ptr<Byte> a_pin = &a_array[0];
        a_str.assign( reinterpret_cast<char*>(a_pin), a_array->Length );
    }
    return a_str;
}

System::String から std::string の変換ってめんどくさいです。