我读到以二进制格式保存文件比以基于文本的格式保存文件更紧凑。但是我的二进制格式文件比基于文本的文件更大呢?
以下是我编写的函数的基础知识。两者都扫描了同一目录。基于二进制文件总是大几千字节。
基于文本:
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();
答案 0 :(得分:1)
“以二进制格式保存文件比以基于文本的格式保存文件更紧凑”这一说法毫无意义。毕竟,写入二进制文件会写入实例的确切大小,而您可以决定输出文本文件的格式。问问自己,operator<<()
和QDir
如何定义QTextStream
?
除非输出二进制文件非常大,否则如果输入和输出工作正常,则不必担心文件大小增加。
答案 1 :(得分:1)
答案 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;)。