QT 串口以十六进制发送数据

本文详细介绍了如何将十六进制指令转换为串口格式进行发送,并通过实例展示了具体的实现过程。同时,文章指出在转换过程中,正确使用`toAscii()`函数避免了错误发生,这是理解十六进制到串口转换的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做一个东西,它的指令是以十六进制发送的,而我又要以串口形式发送,这不,就需要这方面的资料(在这个网站http://www.gjwtech.com/vcandc/scommassistantcode02.htm,得到参考,仿照写了一下,还真成了,当然,也有群里的高手指导下)。

OK,下面就来具体说怎么实现的。

我的界面是这样的,点击一次,然后读取它返回的信息。

参考上面网站的内容,自己稍微修改下,程序如下:

 

void Widget::String2Hex(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);
}


两个主要函数改写完毕,下面就是一般的串口操作了。就不在啰嗦了。

值得注意的是,hstr=str[i].toAscii();和 lstr = str[i].toAscii();   不加toAscii的话,就会报错。这个就是群里高手提点的,当然,他没直接给出要加toAscii,而是帮我解释了下错误原因,这个是比较重要的俄。

 忘记上传的效果图,加上,textBrowser显示的就是发送的指令。

### 如何使用Qt串口调试助手实现十六进制发送功能 #### 实现十六进制发送的功能需求 为了满足用户通过Qt串口调试助手进行十六进制数据发送的需求,应用程序需提供一种机制让用户输入并转换这些字符为对应的十六进制字节流再经由选定的串行端口发出。此过程涉及UI交互以及底层的数据处理逻辑。 #### 用户界面设计 在图形界面上应设置专门用于接收用户输入的文本框,并允许选择不同的编码方式(ASCII/Hex)。当选择了十六进制模式时,程序会验证用户的输入是否符合合法的十六进制格式[^1]。 ```python def on_send_button_clicked(self): send_type = self.ui.comboBoxSendType.currentText() if "HEX" in send_type.upper(): hex_string = self.ui.textEditSend.toPlainText().strip() try: # Convert string to bytes using hex encoding byte_data = bytes.fromhex(hex_string.replace(' ', '')) # Send data through serial port self.serial.write(byte_data) except ValueError as e: QMessageBox.critical(None, "Error", f"Invalid Hex String: {e}") ``` 这段Python代码展示了如何捕获用户点击发送按钮事件后执行的操作。如果当前选中的发送类型是十六进制,则尝试解析用户提供的字符串成有效的字节数组并通过已配置好的串行连接将其传出。对于非法输入的情况也做了相应的错误提示处理[^2]。 #### 数据校验与异常处理 考虑到实际应用环境中可能出现的各种意外情况,在编写此类功能模块时还需要加入必要的检验措施来确保只有正确的命令才能被执行。比如上述例子中就包含了对非有效十六进制字符串的捕捉和反馈给用户的警告信息。 #### 配置选项支持 除了基本的发送操作外,优秀的软件还会提供更多灵活性高的参数调整机会供高级使用者定制化自己的工作流程。这可能包括但不限于波特率设定、停止位数量指定等影响通讯协议的具体细节。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值