QByteArray QIODevice::readAll()//接受數據
qint64 QIODevice::write(const QByteArray & byteArray)//寫入數據
接受數據和發送數據都是以 字節數組為單位的。我在ini文件存儲了指令串:“01 16 7B 28 48 45 32 30 31 34 31 31 39 35 67 61 29 7D 7E 04” ,讀取INI文件后,返回值為一個QVariant類型,轉到QByteArray后發生錯誤。因為這樣的轉換,把QVaraint中所有的字符都當成了一個字節。例如'01'被當做'0'、‘1’,后面依次類推。當我們調用wirte函數時,因為不能正確傳遞我們要發送的指令串,因此modBus網絡不能正常通信。因此,我們要讓'01'成為一個字節,解決的辦法,利用‘,’號把每一個字節隔開,存入ini文件。當用settings讀取該文件時,把讀取到的值轉換為StringList。在用StringLIst這個字節鏈表,遍歷后,把每個字節存入到QByteArray。
在此要注意的一點是,當我們把
“01 16 7B 28 48 45 32 30 31 34 31 31 39 35 67 61 29 7D 7E 04” 存入QByteArray是,雖然調試時看見的是其ASCII字符,但是當寫入串口后,其ASCII碼是固定的(每個字符為一個固定的7位二進制序列)。我們無需關心把16進制存入Byte/char時,在傳遞的時候發生錯誤。因為傳遞的時候,通信網絡都會把ASCII字符轉換為對應的ASCII碼。
思考,我想ASCII字符應該只是顯示的時候出現,而char (字符型)對應數據的本質應該為一個二進制碼。嚴格來說char其實也是一個整數類型,因為char實質上存儲的是一個整數,而不是字符。比如char a = 'A'; a其實存儲的是65。