2011-06-13 139 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);