Я использую Embarcadero C ++ Builder XE
String command1 = "FREQ ";
String command2 = " Mhz\n";
int index = Form1->ListBox1->ItemIndex;
String full = command1.operator +=(IntToStr((index+2)*10)).operator +=(command2);
TcpClient1->SendBuf((BYTE*)full,13,0);Sleep(30);
и на последней строке я получаю
E2031 Невозможно привести из ‘UnicodeString’ к ‘unsigned char *’
То, что я посылаю, это команда для моего устройства (получателя), формат которой (команда, lenght_of_command). Когда я отправляю это в тексте плана как
TcpClient1->SendBuf((BYTE*)"FREQ 330.5 MHz\n",15,0);Sleep(30);
все отлично. Большое спасибо за любую помощь.
Я бы просто использовал sprintf
char command[999];
sprintf(command, "FREQ %d MHz\n", (index+2)*10);
TcpClient1->SendBuf((BYTE*)command,strlen(command),0);
Sleep(30);
String
карты для UnicodeString
в XE. Самый простой способ исправить ваш код — это использовать AnsiString
вместо этого (и прекратить использование +=
оператор, так как вы не используете его правильно):
AnsiString command1 = "FREQ ";
AnsiString command2 = " Mhz\n";
int index = Form1->ListBox1->ItemIndex;
AnsiString full = command1 + IntToStr((index+2)*10) + command2;
TcpClient1->SendBuf((BYTE*)full.c_str(),full.Length(),0);
Sleep(30);
В качестве альтернативы:
int index = Form1->ListBox1->ItemIndex;
AnsiString full;
full.sprintf("FREQ %d Mhz\n", (index+2)*10);
TcpClient1->SendBuf((BYTE*)full.c_str(),full.Length(),0);
Sleep(30);