1

これはよくある質問であることは知っていますが、std::string または String^ をバイト配列に変換して、tcp 通信用のストリームに書き込むための明確な答えが得られていません。

これは私が試したものです

bool CTcpCommunication::WriteBytes(const std::string& rdatastr)
{
  bool retVal = false;

  try
  {
    if (static_cast<NetworkStream^>(stream) != nullptr)
    {
      array<Byte>^data = System::Text::Encoding::ASCII->GetBytes(rdatastr); 
      stream->Write( data, 0, data->Length ); 
    }
  }
  catch(Exception^)
  {
    // Ignore, just return false
  }
  return retVal;
}

ここで GetBytes が機能しないことはわかっており、std:string を .NET String に変換するためのマーシャリング オプションもチェックしましたが、何も見つかりませんでした。

4

3 に答える 3

5

エンコーディングはすでに正しく、変換は必要ありません。コピーするだけ:

array<Byte>^ data = gcnew array<Byte>(rdatastr.size());
System::Runtime::InteropServices::Marshal::Copy(IntPtr(&rdatastr[0]), data, 0, rdatastr.size());
于 2012-07-06T04:28:25.137 に答える
0

これは私のために働いた..ベンのおかげで

IntPtr ptr((void*)rdatastr.data());
array<Byte>^ data = gcnew array<Byte>(rdatastr.size()); 
System::Runtime::InteropServices::Marshal::Copy(ptr, data, 0, rdatastr.size())
于 2012-07-06T07:42:15.717 に答える