C++ Преобразование строки в байты для отправки через TCP
Я пытаюсь отправить строку из 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 ответа
Я не понимаю, почему вы не используете точно такие же классы.Net Framework в вашем коде ++/CLI. например. System::String
за swon
, Encoding::ASCII
произвести массив байтов.
Все, что вы делали в VB, вы можете отобразить непосредственно на C++/CLI без использования разных классов - это самый простой порт для вас. Когда вы находитесь в сети MSDN, просто выберите C++
посмотреть, чтобы получить примеры вещей, которые вы хотите сделать. Попробуйте это на этой странице, например: http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx
Стив прав, что ту же логику можно дублировать в 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);