2011-06-13 182 views
1

我試圖發送一個28字符的字符串到遠程ip地址和端口。C++將字符串轉換爲通過tcp發送的字節

Dim swon As String = "A55A6B0550000000FFFBDE0030C8" 
Dim sendBytes As [Byte]() 
sendBytes = Encoding.ASCII.GetBytes(swon) 
netStream.Write(sendBytes, 0, sendBytes.Length) 

我現在必須轉換這個橫跨到C++和至今如下:我在vb.net中使用下面的代碼片段成功做到了這一點

char *swon = "A55A6B0550000000FFFBDE0030C8"; 
array<Byte>^ sendBuffer = gcnew array<Byte>(bufferSize); 
sendBuffer = BitConverter::GetBytes(swon); 
tcpStream->Write(sendBuffer, 0, sendBuffer->Length); 

,但我被陷在此刻。我確定我錯過了一個簡單的語法錯誤,但我無法弄清楚它!

爲了澄清,我沒有得到一個錯誤,但我不認爲將字符串轉換爲字節正確,當我轉換回,我只是得到一個「01」

乾杯, 克里斯

回答

3

我不明白你爲什麼不在你的++/CLI代碼中使用完全相同的.Net框架類。例如。 System::Stringswon,Encoding::ASCII來產生字節數組。

你在VB中做的任何事情,你都可以直接將映射到到C++/CLI而不使用不同的類 - 這對你來說是最簡單的端口。當您在線訪問MSDN時,只需選擇C++視圖即可獲取您想要執行的任務。試試在這個頁面上,例如:http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx

+0

非常感謝,這就是我一直在尋找的答案!它只是一個語法問題,sendBuffer = Encoding :: ASCII-> GetBytes(swoff);使用字符串而不是char – Chris 2011-06-13 16:17:58

+0

它不應該很難,因爲你的VB.Net代碼已經工作。祝你好運。 – 2011-06-13 16:21:51

0

Steve是正確的,相同的邏輯可以在C++中複製。但C++ char*已經是ASCII碼,不需要轉換。只需要一份副本即可。

const char swon[] = { "A55A6B0550000000FFFBDE0030C8" }; 
array<Byte>^ sendBuffer = gcnew array<Byte>((sizeof swon) - 1); 
pin_ptr<Byte> startBuffer = &sendBuffer[0]; 
memcpy(startBuffer, swon, sendBuffer->Length); 
tcpStream->Write(sendBuffer, 0, sendBuffer->Length);