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);
Другие вопросы по тегам