c++ - Qt 在串口上发送完整的字节

标签 c++ qt qbytearray qtserialport

我有这个使用 QtSerialPort 的简单代码:

char foo[] = {130,50,'\0'};
serial->write(foo);

我的序列号的结果是 {2, 50}。我认为我可以发送的最大数字是 128(字符从 -128 到 128)。从0到255发送号码的方式在哪里?我尝试使用 unsigned char,但“write”方法不适用于它。 QByteArray 也出现同样的问题。

谢谢大家

最佳答案

QIODevice 接口(interface)具有用于发送的默认字符,这可能取决于编译器。有关详细信息,请参阅文档。

qint64 QIODevice::write(const char * data, qint64 maxSize)

Writes at most maxSize bytes of data from data to the device. Returns the number of bytes that were actually written, or -1 if an error occurred.

但是,另一方面,如果您正确获取数据,则不必太担心。您仍然可以按符号发送大于 128 个值,但它们会显示为负值,例如 0xFF 将为 -1。

同样的逻辑在接收端反序走应该没有问题。

但是,这似乎与您的问题无关,因为您没有得到 130 的相应负值,而是将其截断为 7 位。确保您的连接是 8 个数据位。

您可以在使用此代码打开端口后明确设置:

QSerialPort serialPort;
QString serialPortName = "foo";
serialPort.setPortName(serialPortName);

if (!serialPort.open(QIODevice::WriteOnly)) {
    standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
    return 1;
}   

if (!serialPort.setDataBits(QSerialPort::Data8)) {
    standardOutput << QObject::tr("Failed to set 8 data bits for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
    return 1;
} 

// Other setup code here

char foo[] = {130,50,'\0'};
serialPort.write(foo);

关于c++ - Qt 在串口上发送完整的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20947048/

相关文章:

c++ - 检测是否针对调试 MSVCRT 构建了 .lib

c# - 通过 COM 从 C++ 解决方案调试 C# dll

c++ - 静态编译共享库

c++ - Qdialog.exec() 是如何返回的

c++ - 在 unsigned char 数组中设置 unsigned short

c++ - 无法加载qt平台插件windows

javascript - 列表元素和 JavaScript 值

c++ - 使用 QString 和 QByteArray 的 QDataStream 问题

c++ - Qt-如何将 QByteArray 转换为结构

c++ - 将 QByteArray 转换为 std::vector<unsigned char>