Qt與C文件操作的差異

在使用Qt的QDataStream類進行文件的二進制處理時發現與c語言的標準IO有差異,下面用代碼說明。

#include <QDataStream>
#include <QIODevice>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    int num = 0x12345678;
    QFile file("data_qt.txt");
    file.open(QIODevice::ReadWrite);
    QDataStream in(&file);

    qDebug() << "num_1 = " << num;
    in << num;
    file.seek(0);
    in >> num;
    qDebug() << "num_2 = " << num;

    file.close();
    return 0;
}

程序運行時輸出:

num_1 = 305419896

num_2 = 305419896 

使用Qt creator二進制打開data_qt.txt,文件內容如下


再看C語言代碼:

#include <stdio.h>

int main()
{
    int num = 0x12345678;
    FILE *fp = NULL;

    fp = fopen("data_c.txt", "rb+");
	printf("num_1 = %d\n", num);
    fwrite((void *)&num, 1,sizeof(num), fp);
    fflush(fp);
	fseek(fp, 0, SEEK_SET);
	fread((void *)&num, 1, 4, fp);
	printf("num_2 = %d\n", num);
    fclose(fp);

    return 0;
}

運行輸出結果:


同樣二進制形式打開data_c.txt文件:


對比可以看出Qt寫入文件與C寫入文件對高低字節的處理不同,這樣就會帶來這樣的問題,同樣的文件,比如data_c.txt,當使用Qt的QDataStream整型讀入時值爲0x78563412,而使用標準C的fread讀入則爲0x12345678,這時可能就會造成處理數據的錯誤,因此,在使用Qt對文件進行二進制讀寫時應該注意QDataStream在實現上與fwrite的差異,否則可能會出現處理數據的錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章