c++ - Embarcadero 无法从 'UnicodeString' 转换到 'unsigned char *'

标签 c++ string casting c++builder unicode-string

我正在使用 Embarcadero 的 C++ 构建器 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);

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

最佳答案

String 映射到 XE 中的 UnicodeString。修复代码的最简单方法是改用 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);

关于c++ - Embarcadero 无法从 'UnicodeString' 转换到 'unsigned char *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236711/

相关文章:

c++ - 如何在 Android NDK 中使用 c++0x 线程?

java - 从 HTML 中提取数据并格式化输出

python - 使用 pyformat 进行条件格式化

c# - 将 long.MaxValue 转换为 int 和将 float.MaxValue 转换为 int 有什么区别?

casting - cast(T)x 和 to!T(x) 之间的区别

c++ - 将转发 lambda 转换为函数指针

c++ - WTS连接 session

c++ - inotify,inotify_add_watch() 监控多个目录,c++

javascript - 如何准备数据字符串但字符串不以null结尾

c# - 在 C# 中到处转换( float )。只是 double 工作更好吗?