我知道这是一个经常被问到的问题,我没有明确的答案将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但是没有发现任何。可以帮助我解决这个问题。
答案 0 :(得分:5)
编码已经正确,无需转换。只需复制:
array<Byte>^ data = gcnew array<Byte>(rdatastr.size());
System::Runtime::InteropServices::Marshal::Copy(IntPtr(&rdatastr[0]), data, 0, rdatastr.size());
答案 1 :(得分:1)
这种方法怎么样:
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
答案 2 :(得分:0)
这对我有用..谢谢Ben
IntPtr ptr((void*)rdatastr.data());
array<Byte>^ data = gcnew array<Byte>(rdatastr.size());
System::Runtime::InteropServices::Marshal::Copy(ptr, data, 0, rdatastr.size())