#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);