gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:09:48 25 4
gpt4 key购买 nike

我有这个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com