精华内容
下载资源
问答
  • 2020-08-01 22:25:47

    以16进制接受数据:

    //读取串口缓冲区的所有数据给临时变量temp
    QByteArray temp = MyCom->readAll();

    QDataStream out(&temp,QIODevice::ReadWrite);    //将字节数组读入
    
    while(!out.atEnd())
    {
        qint8 outChar = 0;
        out>>outChar;   //每字节填充一次,直到结束
        //十六进制的转换
        QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));
        ui->textBrowser->insertPlainText(str);
    }
    
    ui->textBrowser->insertPlainText("\n");
    

    以16进制发送数据:

    QString str = ui->lineEdit->text();//从LineEdit得到字符串
    
    QByteArray senddata;
    
    StringToHex(str,senddata);//将str字符串转换为16进制的形式
    
    MyCom->write(senddata);//发送到串口
    

    void Widget::StringToHex(QString str, QByteArray &senddata)
    {
    int hexdata,lowhexdata;
    int hexdatalen = 0;
    int len = str.length();
    senddata.resize(len/2);
    char lstr,hstr;
    for(int i=0; i<len; )
    {
    //char lstr,
    hstr=str[i].toAscii();
    if(hstr == ’ ')
    {
    i++;
    continue;
    }
    i++;
    if(i >= len)
    break;
    lstr = str[i].toAscii();
    hexdata = ConvertHexChar(hstr);
    lowhexdata = ConvertHexChar(lstr);
    if((hexdata == 16) || (lowhexdata == 16))
    break;
    else
    hexdata = hexdata*16+lowhexdata;
    i++;
    senddata[hexdatalen] = (char)hexdata;
    hexdatalen++;
    }
    senddata.resize(hexdatalen);
    }

    char Widget::ConvertHexChar(char ch)
    {
    if((ch >= ‘0’) && (ch <= ‘9’))
    return ch-0x30;
    else if((ch >= ‘A’) && (ch <= ‘F’))
    return ch-‘A’+10;
    else if((ch >= ‘a’) && (ch <= ‘f’))
    return ch-‘a’+10;
    else return (-1);
    }

    更多相关内容
  • Qt 串口通信(QSerialPort)16进制收发实例代码  首先在项目文件里面添加一句   QT += serialport   使用静态函数生成QSerialPortInfo对象列表。列表中的每个QSerialPortInfo对象表示一个串行端口,可以查询端口...
  • qt实现的16进制显示控件,可以用来显示串口原始数据,同时支持字符串显示。资源为一个调用demo。用作参考。
  • QT 收到下位机16进制数转换字符串显示,绝对可靠 简单易懂。
  • 16进制数据接收 //接收到的数据,保存在 info QByteArray info = serialPort->readAll(); //将数据转化成16进制显示 ui->receiveTextEdit->appendPlainText(info.toHex().toUpper()); 16进制数据发 /...

    16进制数据接收

        //接收到的数据,保存在 info
        QByteArray info = serialPort->readAll();
        //将数据转化成16进制显示
        ui->receiveTextEdit->appendPlainText(info.toHex().toUpper());
    

    16进制数据发

    	//从LineEdit得到字符串
        QString str = ui->sendEdit->text();
        //将str字符串转换为16进制的形式
        QByteArray senddata=QByteArray::fromHex(str.toUtf8());
        //发送到串口
        qint64 c=serialPort->write(senddata);
    
    展开全文
  • QT串口接收十六进制

    2021-05-13 18:24:58
    前段时间写了个“QT串口发送十六进制”,为了对应,现在来个下部剧集。我要接收数据比较长,“01 03 24 01 19 …………00 D5 F6”中间省略一大截,为将这些数据接收到一个字符串中,参考QT论坛里的文章,总结如下...

    前段时间写了个“QT串口发送十六进制”,为了对应,现在来个下部剧集。

    我要接收的数据比较长,“01 03 24 01 19 …………00 D5 F6”中间省略一大截,为将这些数据接收到一个字符串中,参考QT论坛里的文章,总结如下:

    QByteArray tmp;

    if(highCom->bytesAvailable() >= 41)

    {

    tmp = highCom->readAll();

    QDataStream out(&tmp,QIODevice::ReadWrite);

    while(!out.atEnd())

    {

    qint8 outChar = 0;

    out>>outChar;

    QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));

    strHex += str;

    }

    qDebug()<

    }

    没有贴出完整的函数,不过这部分就已经可以解决了。 strHex中就是存储的接收十六进制数据。

    想要做什么处理,就根据实际情况来吧。

    当然可以参考下面的代码

    //读取串口

    void MySerial::readMyCom()

    {

    QByteArray temp;

    if(myCom->bytesAvailable() >= 8)

    {

    temp = myCom->readAll(); //读串口缓冲区数据

    }

    QDataStream out(&temp,QIODevice::ReadWrite);    //将字节数组读入

    while(!out.atEnd())

    {

    qint8 outChar = 0;

    out>>outChar;   //每字节填充一次,直到结束

    QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));

    //十六进制的转换

    recBrowser->insertPlainText(str);

    }

    recBrowser->insertPlainText(tr("\n"));

    }

    那就在这里结束吧。0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 作为串口调试助手,16进制显示当然是必备功能。 参考文章:QString、QByteArray 16进制转换 ...1. 根据 "16进制接收" 复选框的值,选择性的将每次新接收到的数据,进行16进制显示转换。 2. 勾选"16进...

     

    作为串口调试助手,16进制显示当然是必备功能。

     

    参考文章:QString、QByteArray 16进制转换

    GitHub源码:Qt串口调试助手下载

     

    16进制接收

    添加两个复选框,"16进制接收","16进制发送"。

    由于我的接收策略为 仅对刚接收到的串口数据进行显示,没有自建的全局缓冲区,以调高效率。于是接收部分的16进制显示转换,要分为3个部分:

    • 1. 根据 "16进制接收" 复选框的值,选择性的将每次新接收到的数据,进行16进制显示转换。

     

    • 2. 勾选 "16进制接收" 复选框时,将先前接收到的asc2显示部分,全部转换为16进制显示。

     

    • 3. 取消勾选 "16进制接收" 复选框时,将接收区的16进制显示,全部转换为 asc2显示。

     

    16进制发送

    发送同理,一样分为3个部分:

    • 1. 根据 "16进制发送" 复选框的值,选择性的将发送区的数据,从16进制显示转换为 asc2的 QByteArray,再串口发送出去。

     

    • 2. 勾选 "16进制发送" 复选框时,将发送区的asc2显示部分,全部转换为16进制显示。

     

    • 3. 取消勾选 "16进制发送" 复选框时,将发送区的16进制显示部分,全部转换为 asc2显示。

     

    运行现象

    16进制和asc2可随意相互转换,无任何进制错误出现。

     

    GitHub源码:Qt串口调试助手下载

    展开全文
  • 1、字符串转成10进制 /********************* 'a'-> a ************/ int charConvertInt(char n) { int result= 0; if(n >= '0' && n <= '9'){ result = n - '0'; }else if( n>= 'A' &...
  • qt串口接收到的数据16进制处理

    千次阅读 2019-10-31 11:35:48
    折腾了两天,我还是太菜了...",打印后上位机这边就可以按十六进制接收了。 代码 void DealData::dataToSeries(QByteArray bytes) { //测试打印是"\xFC\xFC\x00\x00\x80\b\x00\x00\x10\x01\r\n" qDebug()<<by...
  • 开了三个线程,一个线程用于串口,一个线程是主窗口,一个线程是保存数据串口的线程通过信号将数据传递给主程序。 串口: serialthread.h #ifndef SERIALTHREAD_H #define SERIALTHREAD_H #include <QObject&...
  • qt实现的界面程序,实现串口和UDP的字符串和16进制的收发以及qt界面美化的方法。 更详细的介绍及界面展示,请参考笔者博客,在CSDN上搜索“QT学习过程及简单串口和UDP通信demo开发过程及代码分享”。
  • 在做上位机串口通讯时经常用到以 16 进制的方式发送数据 例如 QString str = "abcdef1234"; 转换成 0xab,0xcd,0xef,0x12,0x34 二、转换方式1 /********************* * 功能:字符转成10进制 * Example: '...
  • 有时候在做上位机串口通讯时,经常需要将字符串转成16进制的形式作为发送,借此分析记录一下。 二 需求分析 //假设需要转换的字符:如下 QString str = "abcdef1234"; //需求转换成 0xab,0xcd,0xef,0x12,0x34 ...
  • 为了配合项目的使用,需要写个Qt串口工具,后来发现Qextserialport 这个库很强大,参考网络霍亚飞的一篇doc,很快就搞定了界面以及基本的一些...接收16进制: //串口接收数据 void YComWindow::readYpfCom() { QByteA
  • QT串口发送十六进制数据接收串口数据并十六进制显示[喝小酒的网摘]http://blog.const.net.cn/a/4098.htm 代码如下:  struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,10};  //...
  • 在与串口通信时,我需要给串口发送指定报文格式的命令,在接收串口返回的数据后需要转换成浮点数并且显示出来。这里讲一下我自己碰到的问题,以及我发现的解决方法,如果大家有更好的方法可以在下方留言一起讨论。...
  • Qt串口16进制发送和接收数据

    万次阅读 2014-02-28 11:55:14
    Qt串口16进制发送:  QString str; str = ui->sendtext->toPlainText(); QByteArray senddata; String2Hex(str,senddata); buf=senddata; //发送数据
  • 当我们调用malloc或new相关函数分配内存时,编译器在分配出的地址( 比如0x00221290)前16个字节中记录这块内存的相关信息(在VS2010编译器中测试出的结果)。 举个简单例子: char *str= new char[128...
  • //读取串口 void MySerial::readMyCom() {  QByteArray temp;  if(myCom->bytesAvailable() >= 8)  {  temp = myCom->readAll(); //读串口缓冲区数据   }  QDataStream out(&tem
  • 1.QTextEdit接收文本 QString str1 = ui->textEdit->toPlainText(); QByteArray str2 = QByteArray::fromHex (str1.toLatin1().data());//按十六进制编码接入文本 ... //接受16进制文本 QByteArray
  • 基于博客:http://blog.csdn.net/qq_27312943/article/details/52900527 大部分是“宗师之路”博主的代码,16进制发送与接收都没有问题
  • linux QT串口通信16进制

    2021-02-08 17:54:21
    Linux环境 QT串口通信 16进制收发数据 将QByteArray数据转换为QString 代码片. //将QByteArray数据转换为QString QString ByteArrayToHexxString(QByteArray data) { QString strDisplay; QString str = data.to...
  • //串口数据接收 if(!buf.isEmpty())//判断接收数据是否为空 { int32_t hexData = buf.toInt();//把接受数据转换为int类型 cksj = hexData;//把数据赋值给要用的变量cksj(自己定义的) ////////////
  • 发送的数据结尾是没有空格的,但虚拟串口接收到的数据结尾却多了一个空格,怎么可以去掉这个空格。 QString Dat = ui->sendTextEdit->toPlainText().toLatin1();//获取文本框内容 QByteArray Data_4 = QByteArray::...
  • 2.0适用版本 QT5.9,ubuntu Begin: 在构造函数中添加代码 //查找可用的串口 foreach(const QSerialPortInfo &amp;info, QSerialPortInfo::availablePorts()) { QSerialPort serial; serial.set...
  • 因为要自己控制电机传感器啥的,通信协议又都是十六进制码,所以需要串口通信,结果写的时候再一次忘记怎么弄了,因为记得上一次这个只需要很简单的代码,网上一查全是乱七八糟各种转换,看的有点懵,好在最后还是翻...
  • qt写的绘制串口接收数据的实时曲线,单片机串口发送格式为“AAA%-5d”
  • 由于在开发板上执行,串口没有通过QT自带的SerialPort类接收数据,并且无法打断点,所以只能对比打印来判断。 QByteArray temp = QByteArray(s_data);//= myCom->readAll(); if(temp[0] != 0xEB) qDebug()&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,232
精华内容 492
关键字:

qt串口接收16进制数据