首页 > 其他分享 >Qt QTextStream 类(文本流)和 QDataStream 类(数据流)

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

时间:2024-03-13 09:11:06浏览次数:25  
标签:LF Qt 换行 QIODevice QTextStream QDataStream out

一、二者区别

  (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"。

标签:LF,Qt,换行,QIODevice,QTextStream,QDataStream,out
From: https://www.cnblogs.com/ybqjymy/p/18069806

相关文章

  • 错误:在 /tmp/easy_install-rad8_t5b/PyQt5-5.14.0.tar.gz #15 中找不到安装脚本
    thePyQt55.14.0isbrokenbecausecan'tnotinstallonresppi3.youcantoinstallaversionofPyQt5thatworkingfineonresp.followthesteps:PyQt55.14.0已损坏,因为无法无法安装在resppi3上。您可以安装一个在resp上运行良好的PyQt5版本,请按照以下......
  • QT生成固定长度的随机字符串
    最近项目中有一个需要使用QT生成固定长度随机字符串的需求,需求也很简单,就是生成一个n位的仅包含0-9以及大写字母的字符串,因为这也是第一次使用QT自身的随机数,这里就做一下简单记录。废话不多说,直接上代码。1QStringgetRandomString(intlength)2{3qsrand(QDateTi......
  • 基于QT实现的微量气体数据记录软件
      最近收到一个要求实现力高泰的微量气体分析仪数据下载与记录软件的需求。需要支持力高泰LI-7810、LI-78150、LI-7820、LI-850/830等微量气体分析仪,另外还包括配套的阀箱、冷阱及采样单元的数据获取与记录。其中LI-7810、LI-78150、LI-7820采用以太网通讯,应用成蓄意为MQTT;LI-85......
  • Qt QByteArray与int、float、vector互转
    QByteArray的转换一般在串口通信中常用,将int、float、double转换为4个字节的数组(如255->[0,0,0,255],本文章一律用10进制表示),或将4个字节的数组转换为int、float、double(如[0,0,0,255]->255)。在QT界面中的使用流程,笔者总结为以下思路:从上位机发送一帧指令到串口(封包、根据具体......
  • Qt QTextEdit添加文字的方式
    1.append 添加方式,在文本内容后面添加新的文本内容2.insertText添加方式,可以在textEdit的任何方式添加文本效果和代码1#include"widget.h"2#include"ui_widget.h"3#include<QPalette>4#include<QBrush>5#include<QFont>6#include<QTextCursor&......
  • C++ Qt开发:QNetworkAccessManager网络接口组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkAccessManager组件实现Web网页访问。QNetworkAccessManager是Qt网络模块中的关......
  • Qt--编译安装QWT
    1.下载https://sourceforge.net/projects/qwt/files/2.编译   编译参考如下:1QtCreator打开源码内的qwt.pro,注意:编译器选择Release版本,编译器使用与creator的一样的版本,这里使用msvc201532bit。2打开编译开关,在qwt->otherfiles->qwt.prf中,去掉QMAKE_RPATHDI......
  • Qt quint16 高低字节 quint8
    在C++中,将一个quint16(即无符号16位整数)拆分成高字节和低字节可以通过位运算来完成。quint16通常是通过Qt的数据类型quint16来表示的。以下是一个示例代码,演示如何将quint16拆分成高低字节:1#include<QtGlobal>2#include<iostream>34intmain(){5qu......
  • Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/
    一、前言用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_alaw/pcm_mulaw,将这个原始的音频流保存到mp4文件是会报错的,在调用avformat_write_header写文件头的时候提示(-22)Invali......
  • Qt 将16进制的内容的QString字符串转为QByteArray数组
    1.QString存储十六进制内容我要发送的十六进制内容是0105040100将其储存在QString字符串中1QStringstr;2str="0105040100";2.核心语句将两位的字符串转换为16进制的Int型数字,然后通过强制类型转换成char类型的字符。(具体作用方式我还没去看,但是有用)(char)str.m......