在使用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的差異,否則可能會出現處理數據的錯誤。