当前位置: 代码迷 >> QT开发 >> QDataStream以二进制写下数据为什么不对
  详细解决方案

QDataStream以二进制写下数据为什么不对

热度:88   发布时间:2016-04-25 04:36:56.0
QDataStream以二进制写入数据为什么不对?
//orginal file
  QFile orginal("test.txt");
  if(!orginal.open(QIODevice::ReadOnly)) {
  QMessageBox::warning(0, "Read File",
  "Read file error!",
  QMessageBox::Ok | QMessageBox::Cancel);
  }

  //destination file
  QFile dest("result.ct");
  if(!dest.open(QIODevice::WriteOnly)) {
  QMessageBox::warning(0, "Write File",
  "Write file error!",
  QMessageBox::Ok | QMessageBox::Cancel);
  }
  QDataStream out(&dest);
  out.setVersion(QDataStream::Qt_4_7);
  out << quint32(0x12345678) << orginal.readAll();

  orginal.close();
  dest.close();

//test.txt
在访问方式上,Qt 提供了两个更高级别的抽象:使用 QDataStream 进行二进制方式的访问和使用 QTextStream 进行文本方式的访问。这些类可以帮助我们控制字节顺序和文本编码,使程序员从这种问题中解脱出来。
QFile 对于访问独立的文件是非常方便的,无论是在文件系统中还是在应用程序的资源文件中。Qt 同样也提供了 QDir 和 QFileInfo 两个类,用于处理文件夹相关事务以及查看文件信息等。
这次我们先从二进制文件的读写说起。
以二进制格式访问数据的最简单的方式是实例化一个 QFile 对象,打开文件,然后使用 QDataStream 进行访问。QDataStream 提供了平台独立的访问数据格式的方法,这些数据格式包括标准的 C++ 类型,如 int、double等;多种 Qt 类型,如QByteArray、QFont、QImage、QPixmap、QString 和 QVariant,以及 Qt 的容器类,如 QList<T> 和 QMap<K, T>。先看如下的代码:


//result.ct
4Vx 拊诜梦史绞缴希琎t 提供了两个更高级别的抽象:使用 QDataStream 进行二进制方式的访问和使用 QTextStream 进行文本方式的访问。这些类可以帮助我们控制字节顺序和文本编码,使程序员从这种问题中解脱出来。
QFile 对于访问独立的文件是非常方便的,无论是在文件系统中还是在应用程序的资源文件中。Qt 同样也提供了 QDir 和 QFileInfo 两个类,用于处理文件夹相关事务以及查看文件信息等。
这次我们先从二进制文件的读写说起。
以二进制格式访问数据的最简单的方式是实例化一个 QFile 对象,打开文件,然后使用 QDataStream 进行访问。QDataStream 提供了平台独立的访问数据格式的方法,这些数据格式包括标准的 C++ 类型,如 int、double等;多种 Qt 类型,如QByteArray、QFont、QImage、QPixmap、QString 和 QVariant,以及 Qt 的容器类,如 QList<T> 和 QMap<K, T>。先看如下的代码:


我想将test.txt的内容以二进制形式保存于result.ct文件中,即应该全是乱码啊,让别人看不懂的。
但是却只有前面几个字是乱码,其他都一样。 我想实现的就是要让源文件以二进制形式保存于文件,
使其他人看不懂。。


------解决方案--------------------
这应该是编码方式的问题,你里面村的数据没变,即使你用的二进制,打开文件的时候换下编码方式照样可以看见你写的是什么。建议加密。
简单的加密:把二进制数据进行位运算,但这个对有汉字的东西不好用,因为汉字是两个字节一个字。
用一些特殊的加密:我之前用了哈希加密,Qt提供的有这样的方法,你搜索一下。
------解决方案--------------------
探讨
引用:
这应该是编码方式的问题,你里面村的数据没变,即使你用的二进制,打开文件的时候换下编码方式照样可以看见你写的是什么。建议加密。
简单的加密:把二进制数据进行位运算,但这个对有汉字的东西不好用,因为汉字是两个字节一个字。
用一些特殊的加密:我之前用了哈希加密,Qt提供的有这样的方法,你搜索一下。


还有到底以什么加密呢= =