C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача данных через ClientSocket побайтно  (Прочитано 6297 раз)
xxxmatrixxx
новенький
*

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 1


« : 26 Январь 2013, 13:49:19 »

Здравствуйте,

у меня ситуация такая:

сделал модуль на ПЛИС с процом Nios2 и установленной ОС МикроС(подобно Linux)
есть порт Ethernet на этом модуле, прогу сервера я написал под модуль для работы с ним...

Верхнюю прогу для отладки своей программы написал на CBuilder6.0 с использованием ClientSocket, я подключаюсь к модулю, но передаю данные только в текстовом режиме, т.е. в коде ASCII...
а хотелось бы побайтно, т.е. я ввожу в поле Edit значение facedead( в hex коде), перевожу AnsiString в int, а затем хочу ее передать... но принимается facedead как символы строчные, т.е. в памяти реально код символа в ASCII, а хочется 0xfacedead ...

для передачи использовал следующий код:
int a;
void *mes = &a;
a = Edit1->Text.toInt;

ClientSocket1->Socket->SendBuf(mes,sizeof(a));

как можно еще передать истинные символы, например int или unsigned char через ClientSocket1???

может у кого есть более подробная инфа по используемым функциям для Client и Server???
« Последнее редактирование: 26 Январь 2013, 13:59:56 от xxxmatrixxx » Записан
Leex
Участник
**

Сказали спасибо: +132/-1
Offline Offline

Сообщений: 577


« Ответ #1 : 26 Январь 2013, 15:00:37 »

В билдере вроде были функции по переводу из хека, но я не помню. Я пользуюсь таким велосипедом Улыбка
Код
const char invalid_char = 'z';
unsigned char from_hex_char( const char c )
{
   if (c >= '0' && c <= '9')
return c - '0';
   else if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
   else if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
   return invalid_char;
}
//---------------------------------------------------------------------------
 
int hexToBin(const std::string &data,std::vector<unsigned char> &result)
{
 result.clear();
 const unsigned int len =data.size();
 if (len % 2 != 0)
   return 1;
 result.reserve( len / 2 );
 for (size_t i = 0; i < (len/2); ++i)
 {
   unsigned char c1 = from_hex_char( data[2*i    ] );
   unsigned char c2 = from_hex_char( data[2*i + 1] );
   if (c1 == invalid_char || c2 == invalid_char)
     return 2;
   result.push_back( static_cast<unsigned char>(c1 * 16 + c2) );
 }
 return 0;
}
//---------------------------------------------------------------------------
 
Юзать соответственно нужно функцию hexToBin
Записан
OVE
Участник
**

Сказали спасибо: +62/-0
Offline Offline

Сообщений: 69


« Ответ #2 : 28 Январь 2013, 13:16:48 »

если побайтно, то чем не устраивает
ClientSocket1->Socket->SendBuf(Edit1->Text.c_str(),Edit1->Text.Length());
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines
Страница сгенерирована за 0.114 секунд. Запросов: 22.