4

我的程序使用一些類型爲QByteArray的變量來包含數據(字節)。該字節可能是特殊字符,如'\ 0',1,...因此,調試時無法看到特殊字符後的所有元素。如果我使用std :: vector,我可以看到所有元素。我必須使用QByteArray,但在調試時無法看到此變量的所有元素。幫幫我,PLZ! 謝謝!如何在調試期間看到Qt對象QByteArray的內容?

例如:QByteArray bytes(4,'\ 0'); 現在,如果調試,我只看到「」。但我想看到「'\ 0','\ 0','\ 0','\ 0'」或類似的東西。

我也有與QDateTime相同的問題。但我通過這個幫助解決:http://www.qtcentre.org/threads/32336-View-QDate-and-QDateTime-in-VisualStudio-debugger

此鏈接可以幫助但這不解決我的問題:http://qt-project.org/wiki/IDE-debug-helpers

例子:

QByteArray ba("Hello"); //debuging, see: ba = "Hello"  
ba.append('\0');  
ba.append("a message"); //we just see: ba = "Hello" 
+0

ba.replace( 「\ 0」, 「0 \\」),如果它只是0字節。對於無法打印的字符,ba.toHex()通常很有用。 –

+0

@JoachimPileborg:謝謝 – aviit

+0

@FrankOsterfeld:不,它可能是任何角色 – aviit

回答

1

對於調試,你可以的QByteArray轉換爲QString的和看到的輸出。

例如:

QByteArray bArray; 

QString str = ""; 

str.append(bArray); 

QDebug() << str ; // this will display the content in your console/application output window 

希望這將解決您的問題。

+0

結果相同,因爲QString無法查看第一個不可打印字符後的所有字符。 我的意思是在IDE(Visual Studio 2010)中進行調試。 – aviit

+0

我想我知道了,它是'\ 0'這個問題,而是嘗試使用'\\ 0'。因爲單斜線用作命令,所以'\ 0'表示在linux中爲空字符。 請試試看。我多次遇到這個問題。 – skg

2

我這裏貢獻一段代碼,我不得不寫,因爲我找不到任何做一些接近方法:顯示器的QByteArray作爲的方式蟒蛇有意義的QString會做到這一點:ASCII保持爲這個特殊字符顯示爲十六進制代碼

如果有人知道更好的方法! (這裏的QT 4.6)

QString toDebug(const QByteArray & line) { 

    QString s; 
    uchar c; 

    for (int i=0 ; i < line.size() ; i++){ 
     c = line[i]; 
     if (c >= 0x20 and c <= 126) { 
      s.append(c); 
     } else { 
      s.append(QString("<%1>").arg(c, 2, 16, QChar('0'))); 
     } 
    } 
    return s; 
} 

如:

QByteArray a; 
a.append("et"); 
a.append('\0'); 
a.append("voilà"); 
qDebug() << toDebug(QByteArray(a)); 

回報:

"et<00>voil<e0>" 
相關問題