QTextStream 类(文本流)和 QDataStream 类(数据流)

一、二者区别

(1)QTextStream 类:用于对数据进行文本格式的读/写操作,可在 QString、QIODevice或 QByteArray 上运行,比如把数据输出到 QString、QIODevice 或 QByteArray 对象上,或进行相反的操作。

(2)QDataStream 类:用于对数据进行二进制格式的读/写操作,QDataStream 只可在QIODevice 或 QByteArray 上运行,因为 QString 只存放字符数据

二、QDataStream使用过程问题

写bin文件时不能使用QIODevice::Text,会导致在每个0x0A前面添加一个0x0D。

三、QDataStream 类

(1)字节序大小端

//大端格式,高字节在前
QDataStream out(&outData,QIODevice::ReadWrite);
out.setByteOrder(QDataStream::BigEndian); 


//小端格式,低字节在前
QDataStream out(&outData,QIODevice::ReadWrite);
out.setByteOrder(QDataStream::LittleEndian); 

(2)pos()获取当前文件位置;

        realAll之后会到末尾,可以使用seek(0)移动到起始位置;

        如果已经到达文件的末尾,atEnd()将返回true。

四、LF与CRLF

(1)将Unix的换行符(LF)转换成Windows的换行符(CRLF)可以使用以下命令

sed 's/$/\r/' unixfile.txt > windowsfile.txt

(2)QTextStream写入数据到文件

        QTextStream out(&file);
        out << "Line 1" << endl; // 换行
        out << "Line 2" << Qt::endl; // 换行
        out << "Line 3\n"; // 换行

(3)QFile打开的时候要指定QIODevice::Text,否则 \n和endl 会被解析成不同的内容,特别是windows下,因为windows下换行必须是 CR+LF。

比如file.open(QIODevice::Write),之后不管是用QTextStream还是别的,windows下直接写入“\n”或者用stream的endl,换行都是 LF

如果是file.open(QIODevice::Write | QIODevice::Text),换行就是成了CR+LF。

(4)不同系统之间的区别:

Unix系统里,每行结尾只有“<换行>”,即"\n"Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”Mac系统里,每行结尾是“<回车>”,即"\r"

注意点:在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。

参考:

QDataStream有时使用32位浮点数,有时使用40位浮点数 | 经验摘录

qt5---QTextStream 类(文本流)和 QDataStream 类(数据流) - 天子骄龙 - 博客园

QT数据流大少端设置_月月爱猫粮的博客-CSDN博客

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值