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文件中,即应该全是乱码啊,让别人看不懂的。
但是却只有前面几个字是乱码,其他都一样。 我想实现的就是要让源文件以二进制形式保存于文件,
使其他人看不懂。。
5 个解决方案
#1
这应该是编码方式的问题,你里面村的数据没变,即使你用的二进制,打开文件的时候换下编码方式照样可以看见你写的是什么。建议加密。
简单的加密:把二进制数据进行位运算,但这个对有汉字的东西不好用,因为汉字是两个字节一个字。
用一些特殊的加密:我之前用了哈希加密,Qt提供的有这样的方法,你搜索一下。
简单的加密:把二进制数据进行位运算,但这个对有汉字的东西不好用,因为汉字是两个字节一个字。
用一些特殊的加密:我之前用了哈希加密,Qt提供的有这样的方法,你搜索一下。
#2
哦 那你的意思是说将这些内容以二进制保存时特殊加密对吧?
那我读取的时候,也要解密对么? 然后转换为正常的内容显示?
#3
还有到底以什么加密呢= =
#4
如果你并不需要显示内容,只需要确定内容正确与否(例如密码),可以用哈希加密。哈希加密不能解密,可以把用户输入的密码,和原密码分别取哈希值,然后进行比较。(搜索:Qt 哈希加密)
如果需要显示内容,只是不想让别人直接打开文件就能看见里面的内容,例如存放用户数据的文件。可以用位运算加密:取异或运算(^)。例如(char x = yourdata; char jimi = x ^ 'u')这里的u是你的解密密码,因为再进行jimi ^ 'u'得到的值就是yourdata。当然这种方法对于含有汉语的文本数据不管用,汉语是两个字节的。
还有之中很简单的方法,直接转下编码方式,我记得曾经google出来用过一次,现在记不得了
#5
感谢感谢。哈希加密知道,但是对中文加密解密不行,昨天弄了个加密解密的代码,今天看看
学习学习 呵!
#1
这应该是编码方式的问题,你里面村的数据没变,即使你用的二进制,打开文件的时候换下编码方式照样可以看见你写的是什么。建议加密。
简单的加密:把二进制数据进行位运算,但这个对有汉字的东西不好用,因为汉字是两个字节一个字。
用一些特殊的加密:我之前用了哈希加密,Qt提供的有这样的方法,你搜索一下。
简单的加密:把二进制数据进行位运算,但这个对有汉字的东西不好用,因为汉字是两个字节一个字。
用一些特殊的加密:我之前用了哈希加密,Qt提供的有这样的方法,你搜索一下。
#2
哦 那你的意思是说将这些内容以二进制保存时特殊加密对吧?
那我读取的时候,也要解密对么? 然后转换为正常的内容显示?
#3
还有到底以什么加密呢= =
#4
如果你并不需要显示内容,只需要确定内容正确与否(例如密码),可以用哈希加密。哈希加密不能解密,可以把用户输入的密码,和原密码分别取哈希值,然后进行比较。(搜索:Qt 哈希加密)
如果需要显示内容,只是不想让别人直接打开文件就能看见里面的内容,例如存放用户数据的文件。可以用位运算加密:取异或运算(^)。例如(char x = yourdata; char jimi = x ^ 'u')这里的u是你的解密密码,因为再进行jimi ^ 'u'得到的值就是yourdata。当然这种方法对于含有汉语的文本数据不管用,汉语是两个字节的。
还有之中很简单的方法,直接转下编码方式,我记得曾经google出来用过一次,现在记不得了
#5
感谢感谢。哈希加密知道,但是对中文加密解密不行,昨天弄了个加密解密的代码,今天看看
学习学习 呵!