【问题标题】:Write serial port : invalid conversion from 'int' to 'const char*'写入串口:从“int”到“const char*”的无效转换
【发布时间】:2016-04-06 21:13:44
【问题描述】:

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

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

从 'int' 到 'const char* 的无效转换

但如果我这样做serial->write("A"),它会起作用。你知道为什么吗?

【问题讨论】:

  • 你能展示一些你的代码吗?请发帖Minimal, Complete, and Verifiable example。
  • 当你说“写250”时,你是什么意思?您是要发送字符串"250",还是发送由值为250 的单个字节组成的字符串"\xFA"?
  • 不,我想发送十进制的 250 十六进制的 0xFA

标签: qt


【解决方案1】:

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

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

但是,请注意pCValue 是一个指向临时字符的指针,并且仅在 c 在作用域内时才有效。我猜你还需要在数组末尾添加一个空终止符,如果你不能在串行类中指定数据大小,正如 owacoder 所指出的那样。

【讨论】:

  • 谢谢,但如果我有很多价值要发送怎么办?我不能使用演员表?
  • 创建一个 char 数组,以 5 个值为例:char values[] = {150, 200, 100, 100, 100}(或者最好使用 std::array)或 std::vector 如果大小不固定(并将向量的 data() 函数传递给 write 函数)
  • 谢谢你,如果我做serial->write(values);如何选择值[3]?
  • @A.Fagrell - “250 被编译器解释为 int 类型,并且 serial->write()-函数需要 const char * 作为输入” - 它还要求 @ 987654327@ 被 nul 终止,您的代码不会这样做。
  • @owacoder 或者可以在串行类中指定大小。不知道要求。
【解决方案2】:

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,并且没有用于管理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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多