簡體   English   中英

QextSerialPort(Qt / C ++)的字符編碼問題

[英]Character encoding problem with QextSerialPort (Qt/C++)

我正在QtCreator中開發一個Qt / C ++程序,該程序使用QextSerialPort讀取/寫入串行端口。 我的程序將命令發送到Rhino Mark IV控制器,並且必須讀取這些命令的響應(以防它們產生任何響應)。 我的開發和部署平台是Windows XP Professional。

當Mark IV發送對命令的響應並且我的程序從串行端口緩沖區中讀取該響應時,數據未正確編碼;因此,如果沒有正確編碼,則不會對數據進行編碼。 我的程序似乎無法獲取純ASCII數據。 例如, 當Mark IV發送ASCII“ 0”(十進制48)后跟回車符(十進制13)時,我的緩沖區( char * )得到-80和13。字符未正確編碼,但回車確實是正確的。 我試過使用read (char *data, qint64 maxSize)readAll ()

我一直在使用兩個解釋ASCII數據並顯示相應字符的監視器來監視串行端口通信並且以兩種方式發送的數據似乎已正確編碼 (它們實際上顯示正確)。 鑒於QByteArray不解釋任何字符編碼,並且我嘗試同時使用read (char *data, qint64 maxSize)readAll () ,所以我已經放棄了該問題可能是由Qt引起的。 但是,我不確定問題是否由QextSerialPort引起,因為我的程序正確發送(寫入)數據,但沒有讀取正確的字節。

我也嘗試過使用超級終端與Mark IV控制器進行手動對話,並且通訊也正確進行。 我使用帶有以下參數的超級終端來建立連接:

  • 波特率:9600
  • 數據位:8
  • 奇偶校驗位:0
  • 停止位:1
  • 流量控制:硬件

我的程序使用相同的參數設置串行端口。 超級終端有效,我的程序無效。

我從qextserialport.sourceforge.net開始使用QextSerialPort 1.1,然后在Google Code上嘗試使用來自QextSerialPort的最新源代碼,但問題仍然存在。

是什么導致錯誤的字符編碼?

我必須怎么做才能解決這個問題?

48與-80的氣味對我來說就像是簽名字符與未簽名字符不匹配。 嘗試使用顯式的無符號char *而不是char *。

最后,我意識到我沒有按照Maygarden法官的建議正確配置串行端口。 我沒有在設備手冊中找到該信息,而是在為該設備開發的軟件產品的手冊中找到該信息。

設置用於連接Mark IV控制器的串行端口的正確方法是設置

  • 波特率:9600
  • 數據位:7
  • 平價:偶數
  • 停止位:2位
  • 流量控制:硬件

但是,我仍然想知道為什么即使使用錯誤的配置,超級終端也能正確顯示字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM