Embarcadero Невозможно привести из ‘UnicodeString’ к ‘unsigned char *’

Я использую 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);

все отлично. Большое спасибо за любую помощь.

0

Решение

Я бы просто использовал sprintf

char command[999];
sprintf(command, "FREQ %d MHz\n", (index+2)*10);
TcpClient1->SendBuf((BYTE*)command,strlen(command),0);
Sleep(30);
0

Другие решения

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

По вопросам рекламы [email protected]