c ++将字符串转换为字节以通过tcp发送

时间:2011-06-13 15:43:41

标签: vb.net visual-c++ c++-cli tcp bitconverter

我正在尝试将28个字符的字符串发送到远程IP地址和端口。我使用以下代码片段在vb.net中成功完成了此操作:

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

我现在必须将其转换为c ++并且到目前为止具有以下内容:

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

但是我现在陷入困境。我确定我错过了一个简单的语法错误,但我无法理解它!

为了澄清,我没有收到错误,但我认为字符串没有正确转换为字节,因为当我转换回来时,我只是得到一个'01'

干杯, 克里斯

2 个答案:

答案 0 :(得分:3)

我不明白为什么你不只是在++ / CLI代码中使用完全相同的.Net框架类。例如。 System::String swonEncoding::ASCII生成字节数组。

您在VB中所做的任何事情都可以将直接映射到C ++ / CLI,而无需使用不同的类 - 这对您来说是最方便的端口。当您在线MSDN时,只需选择C++视图即可获得您想要做的事情的示例。请在此页面上尝试,例如:http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx

答案 1 :(得分:0)

史蒂夫说的是,在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);