c Преобразует строку в байты для отправки по tcp

#vb.net #visual-c #c -cli #tcp #bitconverter

#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’

Приветствую, Крис

Ответ №1:

Я не понимаю, почему вы просто не используете то же самое.Классы Net framework в вашем коде / CLI. например. System::String для swon , Encoding::ASCII создания массива байтов.

Все, что вы делали в VB, вы можете напрямую перенести в C / CLI без использования других классов — это самый простой порт для вас. Когда вы находитесь в MSDN online, просто выберите C представление, чтобы получить примеры того, что вы хотите сделать. Попробуйте это на этой странице, например:http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx

Комментарии:

1. Большое спасибо, это ответ, который я искал! Это просто синтаксический вопрос, sendBuffer = Encoding::ASCII-> getBytes(swoff); работает со строками, а не с символом

2. Это не должно быть очень сложно, поскольку ваш VB. Сетевой код уже работает. Удачи.

Ответ №2:

Стив прав, что та же логика может быть продублирована в C . Но C char* уже является ASCII, преобразование не требуется. Все, что нужно, это просто скопировать.

 const char swon[] = { "A55A6B0550000000FFFBDE0030C8" };
array<Byte>^ sendBuffer = gcnew array<Byte>((sizeof swon) - 1);
pin_ptr<Byte> startBuffer = amp;sendBuffer[0];
memcpy(startBuffer, swon, sendBuffer->Length);
tcpStream->Write(sendBuffer, 0, sendBuffer->Length);