2012-07-06 130 views
1

我知道這是一個經常被問到的問題,我沒有明確的答案將std :: string或String ^轉換爲字節數組來寫入到一個用於tcp通信的流。將std :: string或string ^轉換爲C++/cli中的字節數組

這是我曾嘗試

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轉換:字符串.NET字符串,但還沒有發現有人any.Can幫助我在解決這個問題..

+0

封送處理到.NET字符串,這是很好描述*無處不在*,與此無關,你正在試圖製作一個'數組' – 2012-07-06 04:29:14

回答

5

編碼已經是正確的,不需要轉換。只需複製:

array<Byte>^ data = gcnew array<Byte>(rdatastr.size()); 
System::Runtime::InteropServices::Marshal::Copy(IntPtr(&rdatastr[0]), data, 0, rdatastr.size()); 
+0

@ShivShambo:已添加全名。 – 2012-07-06 04:36:38

+0

..謝謝..錯誤現在說C2440:'':不能從'const char *'轉換爲'System :: IntPtr' – ShivShambo 2012-07-06 06:18:25

+0

我改變了一下它的工作..我更新了 – ShivShambo 2012-07-06 07:40:56

0

這個工作對me..Thanks奔

IntPtr ptr((void*)rdatastr.data()); 
array<Byte>^ data = gcnew array<Byte>(rdatastr.size()); 
System::Runtime::InteropServices::Marshal::Copy(ptr, data, 0, rdatastr.size()) 
+0

另請參閱http://stackoverflow.com/a/10380166/45603 – 2012-07-06 12:15:45

相關問題