2016-04-06 62 views
0

我想通過串口COM在Qt和μC之間發送數據。寫入串口:從'int'到'const char *'的無效轉換

我試圖發送一個字符,但是當我用serial->write(250),我得到這個錯誤:

invalid conversion from 'int' to 'const char*

但如果我這樣做serial->write("A"),它的工作原理。你有什麼想法,爲什麼?

+0

你能展示一些你的代碼嗎?請發佈[最小,完整和可驗證示例](http://www.stackoverflow.com/help/mcve)。 – owacoder

+0

當你說「寫250」時,你是什麼意思?你想發送字符串「250」還是字符串「」\ xFA「'由單個字節值爲250的字符串組成? –

+0

不,我想發送250十進制0xFA在十六進制 – Ale

回答

0

250由編譯器解釋爲int類型,而serial->write()函數需要const char *作爲輸入; 如果你想發送250爲一個char,你要轉換的類型:

char cValue = 250; 
char *pCValue = &cValue; 
serial->write(pCValue); 

但是,請注意,pCValue是指向臨時字符,只會是有效的,而c是在範圍內。我猜你還需要在數組的末尾添加一個空終止符,如果你不能在串行類中指定數據大小,就像owacoder指出的那樣。

+0

謝謝,但這是煩人的,如果我有很多的價值發送? 我不能使用演員? – Ale

+0

創建一個char數組,例如有5個值:char values [] = {150,200,100,100,100}(或者最好使用std :: array)或std :: vector 如果大小不固定(和傳遞向量的數據() - 函數寫入函數) –

+0

謝謝,所以如果我做 serial-> write(values); 如何選擇值[3]? – Ale

0

上QSerialPort可用於寫入數據的成員都是從這個docs

write(const char *, qint64) : qint64 
write(const char *) : qint64 
write(const QByteArray &) : qint64 
writeData(const char *, qint64) : qint64 
writeData(const char *, qint64) : qint64 

如果使用serial->write(250)編譯投的數量爲int和threre是管理一個int沒有成員。相反,如果您使用serial->write("A"),則「A」可以投射到char *

對於發送大量字節你可以使用的QByteArray:

QByteArray cmd; 
cmd.append('A'); 
cmd.append('B'); 
cmd.append('C'); 
serial -> write (cmd); 

這樣,把所有人物和有很多,可以將對象轉換爲一個QByteArray中有用的Qt類的;例如一個QString就是這樣簡單地轉換爲QByteArray:

QString str = "ABC"; 
QByteArray cmd = str.toLatin1(); 
serial -> write (cmd); 
相關問題