门户
书籍
教程
论坛
问答
下载
签到
个人空间
帐号
自动登录
找回密码
密码
登录
立即注册
账号
自动登录
找回密码
密码
登录
立即注册
请绘制轨迹完成人机验证
由vaptcha提供技术支持
登录
注册
搜索
搜索
搜索
热搜
qml
quick
串口
输入中文
数据库
arm
百度地图
qt聊天
QT安装
安装
多窗口
中文乱码
聊天
局域网
鼠标
QT
图片
乱码
rs485通讯
多线程
android
多文档编辑器
本版
用户
本版
用户
【HUX】问题互助平台
博客
动态
好友
帖子
收藏
道具
勋章
任务
淘帖
动态
日志
相册
分享
记录
留言板
群组
门户
导读
排行榜
设置
我的收藏
退出
Qt开源社区
›
精华区(请在“有问必答”发帖)
›
有问必答
›
数据处理
›
看书中Qdatastream的问题。
发布主题
返回列表
看书中Qdatastream的问题。
2
回复
6777
查看
[复制链接]
caiwei_cs
当前离线
积分
124
caiwei_cs
累计签到:2 天
连续签到:1 天
来源:
2014-11-21 14:33:55
显示全部楼层
|
阅读模式
10
Qter豆
在《QT creator 快速入门》中15.2.2 使用数据流读写二进制数据中看到如下代码:
QFile file1("file.dat");
file1.open(QIODevice::WriteOnly);
QDataStream out(&file1);
out<<QString("the answer is:");
out<<(qint32)42;
file1.flush();
file1.close();
file1.open(QIODevice::ReadOnly);
QDataStream in(&file1);
QString str;
qint32 a;
in>>str>>a;
qDebug()<<str<<a;
file1.close();
复制代码
可以顺利运行。但是我有些不明白的地方:
1.例子中,先写入一个QString ,再写入一个(qint32),读出的时候是按照这个顺序读的。
那么,
以Qdatastream读写数据就一定要匹配咯?不知道怎么写的,就可能读不出正确的数据?
是不是因为这个原因,书中下面介绍了:要在数据流前面写入一个简短的数据头。
是不是读的时候读出数据头。利用里面包含的幻数和版本号来确认数据格式?
这部分代码截图(图1-图3)下:
2.我按照上面代码写的数据。用ultraedit打开。
如图4:
为什么有很多空格呢?是因为写的是Qstring么?这个是qstring的格式,和c的字符串不一样。
群里有人说要看qt序列化的代码。
我搜了一下,但是还是没明白序列化是什么意思。代码也无从理解了
。
谢谢大家。
附件:
您需要
登录
才可以下载或查看,没有帐号?
立即注册
最佳答案
yafeilinux
查看完整内容
写数据的时候,放入幻数或其他头数据,就是为了方便读取。就像tcp、udp数据有固定格式一样,我们需要为数据指定名称、大小、各部分的字节是什么数据等信息,这样接收方才可以正确进行读取。
回复
使用道具
举报
yafeilinux
当前离线
积分
2051
yafeilinux
累计签到:1569 天
连续签到:1 天
2014-11-21 14:33:56
显示全部楼层
写数据的时候,放入幻数或其他头数据,就是为了方便读取。就像tcp、udp数据有固定格式一样,我们需要为数据指定名称、大小、各部分的字节是什么数据等信息,这样接收方才可以正确进行读取。
回复
使用道具
举报
caiwei_cs
当前离线
积分
124
caiwei_cs
累计签到:2 天
连续签到:1 天
2014-11-24 12:24:00
显示全部楼层
谢谢版主
回复
使用道具
举报
返回列表
发表新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满)
我知道了