当前位置: 首页 > 网络知识

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

时间:2026-01-29 09:26:56

一、二者区别

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

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

二、QDataStream使用过程问题

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

三、QDataStream 类

(1)字节序大小端

1 //大端格式,高字节在前 2 QDataStream out(&outData,QIODevice::ReadWrite); 3 out.setByteOrder(QDataStream::BigEndian); 4 5 6 //小端格式,低字节在前 7 QDataStream out(&outData,QIODevice::ReadWrite); 8 out.setByteOrder(QDataStream::LittleEndian);

四、LF与CRLF

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

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

(2)QTextStream写入数据到文件

1 QTextStream out(&file); 2 out << "Line 1" << endl; // 换行 3 out << "Line 2" << Qt::endl; // 换行 4 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"。



上一篇:Qt QObject::killTimer: timers cannot be stopped from another thread
下一篇:Qt qss如何设置字体大小
Qt
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素