2013-04-16 33 views
0

我想用QDataStream編寫二進制文件。 問題是下面的代碼,當我寫my_string =「13」,我讀0;當my_string不等於「13」(「12」,「14」,「20」,...)時,我讀取了真實值(12,14,20,...)。 有誰知道爲什麼我有這個問題正好與13號Qt C++ QDataStream讀取數字13

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    //open the file to write 
    QFile file1("test"); 
    if (!file1.open(QIODevice::WriteOnly | QIODevice::Text)) 
     return; 
    QDataStream stream1(&file1); 
    QString my_string = "13"; 

    qint8 val8 = my_string.toInt(); 
    stream1 << val8; 

    file1.close(); 


    //open the file to read 
    QFile file2("test"); 
    file2.open(QIODevice::ReadOnly | QIODevice::Text); 

    QDataStream stream2(&file2); 

    qint8 val2; 
    stream2>> val2; 

    QListWidgetItem *item = new QListWidgetItem; 
    item->setText(QString::number(val2)); 
    ui->listWidget->addItem(item); 

    file2.close(); 
} 

回答

1

您打開在文本模式下的文件,你寫的二進制值。代碼13(0xD)的字符是換行符。通過刪除QIODevice :: Text以二進制模式打開文件,它應該開始工作。

+0

謝謝!這是好的 – federem

+0

瞭解更多關於文本/二進制模式,它總是給出很多問題:) – Caladan