Qt与C文件操作的差异

在使用Qt的QDataStream类进行文件的二进制处理时发现与c语言的标准IO有差异,下面用代码说明。

#include 
#include 
#include 
#include 

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 

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;
}

运行输出结果:
Qt与C文件操作的差异_第1张图片


同样二进制形式打开data_c.txt文件:


对比可以看出Qt写入文件与C写入文件对高低字节的处理不同,这样就会带来这样的问题,同样的文件,比如data_c.txt,当使用Qt的QDataStream整型读入时值为0x78563412,而使用标准C的fread读入则为0x12345678,这时可能就会造成处理数据的错误,因此,在使用Qt对文件进行二进制读写时应该注意QDataStream在实现上与fwrite的差异,否则可能会出现处理数据的错误。

你可能感兴趣的:(Qt)