c ++ Преобразование строки в байты для отправки через TCP - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь отправить строку из 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'

Cheers, Chris

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

Я не понимаю, почему вы не используете точно такие же классы .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

0 голосов
/ 14 июня 2011

Стив прав, что та же логика может быть продублирована в 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);
...