Qt 写入串行端口:从';int';至';常量字符*';
我想通过串口COM在Qt 写入串行端口:从';int';至';常量字符*';,qt,Qt,我想通过串口COM在Qt和µC之间发送数据 我试图发送一个字符,但当我使用串行->写入(250)时,出现以下错误: 从“int”到“const char”的转换无效* 但是如果我做了串行->写(“A”),它就可以工作了。你知道为什么吗?250被编译器解释为类型int,而serial->write()-函数需要一个const char*作为输入; 如果要将250作为字符发送,则必须转换类型: char cValue = 250; char *pCValue = &cValue; seria
Qt
和µC之间发送数据
我试图发送一个字符,但当我使用串行->写入(250)
时,出现以下错误:
从“int”到“const char”的转换无效*
但是如果我做了
串行->写(“A”)
,它就可以工作了。你知道为什么吗?250被编译器解释为类型int
,而serial->write()
-函数需要一个const char*
作为输入;
如果要将250
作为字符发送,则必须转换类型:
char cValue = 250;
char *pCValue = &cValue;
serial->write(pCValue);
但是,请注意,
pCValue
是指向临时字符的指针,并且仅在c在范围内时有效。我猜,如果您不能指定串行类中的数据大小,您还需要在数组的末尾添加一个空终止符,正如owacoder所指出的那样。QSerialPort上可用于写入数据的成员来自:
如果您使用serial->write(250)
编译器将数字转换为int,而threre不是管理int的成员。相反,如果您使用serial->write(“A”)
则“A”可以转换为char*
要发送大量字节,可以使用QByteArray:
QByteArray cmd;
cmd.append('A');
cmd.append('B');
cmd.append('C');
serial -> write (cmd);
通过这种方式发送所有字符,有很多有用的Qt类可以将对象转换为QByteArray;例如,一个QString就是这样简单地转换成QByteArray:
QString str = "ABC";
QByteArray cmd = str.toLatin1();
serial -> write (cmd);
你能展示一下你的代码吗?当你说“写250”时,你是什么意思?您想发送字符串
“250”
,还是由一个值为250的字节组成的字符串“\xFA”
?不,我想以十进制0xFA的形式发送250谢谢,但这很烦人,如果我有很多值要发送怎么办?我不能使用cast?创建一个char数组,例如有5个值:char values[]={150、200、100、100、100}(或者最好使用std::array)或std::vector,如果大小不固定(并将vector的data()-函数传递给write函数),谢谢您,如果我使用serial->write(values);如何选择值[3]?@A.Fagrell-“250被编译器解释为int类型,而serial->write()-函数需要一个常量字符*作为输入”-它还要求const char*
以nul结尾,而您的代码不会这样做。@OWA命令这样做,或者可以在serial类中指定一个大小。我不知道这些要求。
QString str = "ABC";
QByteArray cmd = str.toLatin1();
serial -> write (cmd);