写串口:从'int'到'const char *'的无效转换

时间:2016-04-06 21:13:45

标签: qt

我想通过串口COM在Qt和μC之间发送数据。

我正在尝试发送一个字符,但是当我使用serial->write(250)时,我收到此错误:

  

从'int'无效转换为'const char *

但如果我做serial->write("A"),它就有效。你知道为什么吗?

2 个答案:

答案 0 :(得分:0)

250由编译器解释为类型int,而serial->write() - 函数需要const char *作为输入; 如果要将250作为char发送,则必须转换类型:

char cValue = 250;
char *pCValue = &cValue;
serial->write(pCValue);

但请注意,pCValue是指向临时字符的指针,仅在c在范围内时才有效。我猜你还需要在数组的末尾添加一个null终止符,如果你不能指定serial-class中的数据大小,正如owacoder所指出的那样。

答案 1 :(得分:0)

QSerialPort上可用于写入数据的成员来自docs

write(const char *, qint64 ) : qint64
write(const char *) : qint64
write(const QByteArray &) : qint64
writeData(const char *, qint64 ) : qint64
writeData(const char *, qint64 ) : qint64

如果使用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);