二进制文件格式与基于文本的格式文件大小

时间:2014-06-01 16:32:19

标签: c++ linux qt file-io binary

我读到以二进制格式保存文件比以基于文本的格式保存文件更紧凑。但是我的二进制格式文件比基于文本的文件更大呢?

以下是我编写的函数的基础知识。两者都扫描了同一目录。基于二进制文件总是大几千字节。

基于文本:

void oldSave(){
    QFile file("sentry.dat");
    QTextStream out(&file);
    file.open(QIODevice::WriteOnly);
    QDir dir = dirSelect;

    out << "Directory: " << dirSelect << endl; 
    //prepend directory from which scan was selected to begin from

    out << QCryptographicHash::hash(hashFile.readAll(),
              QCryptographicHash::Md5).toHex()
        << " : " << hashFile.fileName() << "\n";

二进制为基础的:

 void saveFile(){
    QFile file("sentry.dat");
    QDataStream out(&file);
    file.open(QIODevice::WriteOnly);
    QDir dir = dirSelect;

    out << dirSelect;
    out << QCryptographicHash::hash(hashFile.readAll(), QCryptographicHash::Md5) 
        << hashFile.fileName();

3 个答案:

答案 0 :(得分:1)

“以二进制格式保存文件比以基于文本的格式保存文件更紧凑”这一说法毫无意义。毕竟,写入二进制文件会写入实例的确切大小,而您可以决定输出文本文件的格式。问问自己,operator<<()QDir如何定义QTextStream

除非输出二进制文件非常大,否则如果输入和输出工作正常,则不必担心文件大小增加。

答案 1 :(得分:1)

可能this教程可以解释这个问题。请阅读

部分
  

ASCII和二进制文件的区别?

。此外,再考虑使用UTF-8(当然需要比ASCII更多的空间)而不是ASCII,你就会明白它的大小差异。

答案 2 :(得分:1)

查看toHex方法。提示:将toHex的输出分配给字符串,并使用调试器查看字符串。

toHex方法可能正在转换ASCII十六进制转换中的内部表示。例如,值0x25(1字节的内部表示)可以转换为0x30,0x78,0x32,0x35,这是&#39; 0&#39;,&#39; x&#39;的ASCII代码,& #39; 2&#39;,&#39; 5&#39;。因此,将二进制文件扩展4倍(前面是&#34; 0x&#34;)或扩展2倍(不带&#34; 0x&#34;)。