【问题标题】:Sending hex data via serial communication with QT通过与 QT 的串行通信发送十六进制数据
【发布时间】:2021-04-05 02:34:09
【问题描述】:

我正在寻找通过串行通信发送十六进制数据的方法 我搜索了几次并遵循了一些方法,但它没有用。 我检查了该协议是否正在使用其他将十六进制数据发送到设备的软件 下面是我的代码

const char data[]={0xAA,0xAA,0x01,0x00,0x00,0x0E,0x00,0x01,0x00,0x00,0x00,0x2D,0x37,0x1D,0xAA,0xAA,0x01,0x00,0x00,0x0E,0x00,0x0C,0x10,0x00,0x00,0x01,0x76,0x13}; 
serial->setPortName(("COM8"));
initSerialPort(); // baud rate and etc

if(serial->open(QIODevice::ReadWrite))
{
    qDebug()<<"Port is open!";
    if(serial->isWritable())
    {
        qDebug()<<"Yes, i can write to port!";
       int size = sizeof(data);
       serial->write(data,size);
    }
}

当我使用 uint16_t、uchar 等其他声明时,写入函数无法将参数 1 从 uint16_t(或 uchar)转换为 const char *

我也尝试过这种形式

QByteArray hex("AAAA0100000E00010000002D371DAAAA0100000E000C100000017613");
QByteArray data = QByteArray::fromHex(hex);

它也没有工作

【问题讨论】:

  • 当我使用其他声明 [...] 写入函数时无法转换参数 - 那么,不要使用它吗?你想做什么才是最重要的。 QByteArray data 版本效果很好,但它当然不需要 size 参数,因为数组/向量类的全部意义在于它们知道自己的大小,因此您不再需要编写 C 代码。
  • QByteArray 具有序列化值的能力,并且此操作由“ stackoverflow.com/questions/33217592/…

标签: c++ qt serial-port qt5 serial-communication


【解决方案1】:

您只能使用QByteArray 来做到这一点,例如:

connect(serial, &QSerialPort::readyRead, this, &YourClass::doSomeStuff);

QByteArray arr;

arr += static_cast<char>(0xAA);
arr += static_cast<char>(0x01);

<...>

serial->setPortName("COM8");
initSerialPort(); // baud rate and etc

if(serial->open(QIODevice::ReadWrite) && serial->isWritable())
    serial->write(arr);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多