rebel, многое можно сократить - меньше текста, легче будет разбираться. Для начала:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
............
beg=5;
temp[0]='<';temp[1]='-';temp[2]='-';temp[3]=' ';temp[4]=' ';
bit=rec_text[0];
x=bit/16;y=bit%16;
switch (x)
{
case 10:temp[beg]='A';break;
case 11:temp[beg]='B';break;
case 12:temp[beg]='C';break;
...........
case 1:temp[beg]='1';break;
case 0:temp[beg]='0';break;
};
В первом приближении: т.к. temp - символьный массив, а x - int, то предоставим всю работу компилятору - заменим switch() :
Если капнуть глубже, то становится понятно что нужен перевод числа в hex-строку. Тут еще сокращаем:
snprintf(temp,sizeof(temp),"<-- %02X",(int)rec_text[0]);
Далее - ф-ия void convert_send(void) :
1) два блока switch() заменяем на:
sscanf)rec_text,"%jx",&beg:;
2)
Form1->ServerSocket1->Socket->Connections[0]->SendText(bitascii);
bitascii имеет тип char, а в SendText() понимает char, или ему нужен char* ? Тут ничего не буду утверждать - CBuilder-а у меня нет.
Ф-ии snprintf() и sscanf() описаны в заголовке stdio.h.
Я пробовал. Но он ругается. Не хочет делать
rec_text=Socket->ReceiveText();
даже если rec_text будет указателем на строку, и под него будет выделено место в памяти.
Так точно не получится - разные типы. И значение заранее созданному массиву так присвоить нельзя - только копированием.
Посмотри какой тип возвращает ReceiveText(), создай переменную этого типа, прими в нее текс и сконвертируй его в строку (наверняка такая ф-ия есть).
И самое главное: я понимаю, что CBuilder позволяет делать окна/кнопки и легко ими управлять, но коли язык С++, то начни с его изучения. Особенно почитай про типы данных.