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 回答
2

这个方法怎么样:

String ^sTemp;
array<Byte> ^TxData;

sTemp = "Hello";
TxData = System::Text::Encoding::UTF8->GetBytes(sTemp);

链接:http ://www.electronic-designer.co.uk/visual-cpp-cli-dot-net/strings/convert-string-to-byte-array

于 2016-08-23T01:19:34.857 回答
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 回答