内河码头 无法从'UnicodeString'投射到'unsigned char *'

Embarcadero Cannot cast from 'UnicodeString' to 'unsigned char *'

本文关键字:unsigned char UnicodeString 码头 内河      更新时间:2023-10-16

我正在使用Embarcadero的c++构建器XE

String command1 = "FREQ ";
String command2 = " Mhzn";
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*'

我发送的是我的设备(接收器)的命令,格式为(command, lenght_of_command)。当我把它发送到plan文本中,比如

TcpClient1->SendBuf((BYTE*)"FREQ 330.5 MHzn",15,0);Sleep(30);

一切正常。非常感谢您的帮助。

String映射到XE中的UnicodeString。修复代码的最简单方法是使用AnsiString代替(并停止使用+=操作符,因为您没有正确使用它):

AnsiString command1 = "FREQ ";
AnsiString command2 = " Mhzn";
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 Mhzn", (index+2)*10);
TcpClient1->SendBuf((BYTE*)full.c_str(),full.Length(),0);
Sleep(30);

我就用sprintf

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