Qt 多种方式读写二进制文件

2023-11-02

将文本数据写入二进制文件,然后从二进制文件中读出,还原为文本数据。

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDataStream>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写二进制文件
    QFile file("F:/1.txt");
    if(!file.open(QIODevice::WriteOnly))
    {
        qDebug() << "Can't open file for writing";
        return 0;
    }
    QDataStream out(&file);
    out.setVersion(QDataStream::Qt_5_7);
    out << int(12) << QByteArray("123");
    file.close();

    //读二进制文件
    if (!file.open(QIODevice::ReadOnly))
    {
        qDebug() << "Cannot open file for reading: ";
        return 0;
    }
    QDataStream in(&file);
    in.setVersion(QDataStream::Qt_5_7);
    int n;
    QByteArray s;
    in >> n >>  s;
    file.close();
    qDebug() << n << s;

    return a.exec();
}

运行结果:
这里写图片描述

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>

class T
{
public:
    int a;
    double b;
    QString c;

    T(int a1, double b1, QString c1);

    friend QDataStream& operator<<(QDataStream &out, const T &t);
    friend QDataStream& operator>>(QDataStream &in, T &t);
};

T::T(int a1, double b1, QString c1)
{
    a = a1;
    b = b1;
    c = c1;
}

QDataStream& operator <<(QDataStream &out, const T &t)
{
    out << t.a << t.b << t.c;
    return out;
}

QDataStream& operator >>(QDataStream &in, T &t)
{
    int a;
    double b;
    QString c;
    in >> a >> b >> c;
    t.a = a;
    t.b = b;
    t.c = c;
    return in;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写二进制文件
    T t(1, 2, "3");
    QFile writeFile("1.dat");
    writeFile.open(QIODevice::WriteOnly);
    QDataStream out(&writeFile);
    out << t;
    writeFile.close();

    //读二进制文件
    QFile readFile("1.dat");
    readFile.open(QIODevice::ReadOnly);
    QDataStream in(&readFile);
    in >> t;
    readFile.close();
    qDebug() << t.a << t.b << t.c;

    return 0;
    return a.exec();
}

运行结果:
这里写图片描述

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>

class T
{
public:
    int a;
    double b;
    QString c;

    T(int a1, double b1, QString c1);
};

T::T(int a1, double b1, QString c1)
{
    a = a1;
    b = b1;
    c = c1;
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写文件
    T t(1, 2, "34");
    QFile writeFile("1.dat");
    writeFile.open(QIODevice::WriteOnly);
    QDataStream out(&writeFile);
    out.writeRawData((char *)&t, sizeof(t));
    writeFile.close();

    //读文件
    QFile readFile("1.dat");
    readFile.open(QIODevice::ReadOnly);
    QDataStream in(&readFile);
    in.readRawData((char *)&t, sizeof(t));
    readFile.close();
    qDebug() << t.a << t.b << t.c;

    return 0;
    return a.exec();
}

运行结果:
这里写图片描述

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写文件
    int aa = 1;
    char b = 'c';
    double c = 2;
    QFile writeFile("1.dat");
    writeFile.open(QIODevice::WriteOnly);
    QDataStream out(&writeFile);
    out.writeRawData((char *)&aa, sizeof(int));
    out.writeRawData((char *)&b, sizeof(char));
    out.writeRawData((char *)&c, sizeof(double));
    writeFile.close();

    //读文件
    QFile readFile("1.dat");
    readFile.open(QIODevice::ReadOnly);
    QDataStream in(&readFile);
    in.readRawData((char *)&aa, sizeof(int));
    in.readRawData((char *)&b, sizeof(char));
    in.readRawData((char *)&c, sizeof(double));
    readFile.close();
    qDebug() << aa << b << c;

    return 0;
    return a.exec();
}

运行结果:
这里写图片描述

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写文件
    int aa = 1;
    char b = 'c';
    double c = 2;
    QFile writeFile("1.dat");
    writeFile.open(QIODevice::WriteOnly);
    QDataStream out(&writeFile);
    out.writeRawData((char *)&aa, sizeof(int));
    out.writeRawData((char *)&b, sizeof(char));
    out.writeRawData((char *)&c, sizeof(double));
    writeFile.close();

    //读文件
    QFile readFile("1.dat");
    readFile.open(QIODevice::ReadOnly);
    QDataStream in(&readFile);
    char bf[100];
    in.readRawData((char *)&bf, sizeof(int) + sizeof(char) + sizeof(double));
    readFile.close();

    memcpy(&aa, bf, sizeof(int));
    memcpy(&b, bf + 4, sizeof(char));
    memcpy(&c, bf + 5, sizeof(double));
    qDebug() << aa << b << c;

    return 0;
    return a.exec();
}

运行结果:

这里写图片描述

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写文件
    int aa = 1;
    char b = 'c';
    double c = 2;
    QFile writeFile("1.dat");
    writeFile.open(QIODevice::WriteOnly);
    QDataStream out(&writeFile);
    out.writeRawData((char *)&aa, sizeof(int));
    out.writeRawData((char *)&b, sizeof(char));
    out.writeRawData((char *)&c, sizeof(double));
    writeFile.close();


    //读文件
    QFile readFile("1.dat");
    readFile.open(QIODevice::ReadOnly);
    QByteArray by;
    char *bf;
    by = readFile.readAll();
    bf = by.data();
    readFile.close();

    memcpy(&aa, bf, sizeof(int));
    memcpy(&b, bf + 4, sizeof(char));
    memcpy(&c, bf + 5, sizeof(double));
    qDebug() << aa << b << c;

    return 0;
    return a.exec();
}

运行结果:

这里写图片描述

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写文件
    int aa = 1;
    char b = 'c';
    double c = 2;
    QFile writeFile("1.dat");
    writeFile.open(QIODevice::WriteOnly);
    QDataStream out(&writeFile);
    char bbf[100];
    char *p;
    p = (char *)&aa;
    bbf[0] = p[0];
    bbf[1] = p[1];
    bbf[2] = p[2];
    bbf[3] = p[3];
    p = (char *)&b;
    bbf[4] = p[0];
    p = (char *)&c;
    bbf[5] = p[0];
    bbf[6] = p[1];
    bbf[7] = p[2];
    bbf[8] = p[3];
    bbf[9] = p[4];
    bbf[10] = p[5];
    bbf[11] = p[6];
    bbf[12] = p[7];

    out.writeRawData(bbf, 13);
    writeFile.close();


    //读文件
    QFile readFile("1.dat");
    readFile.open(QIODevice::ReadOnly);
    QByteArray by;
    char *bf;
    by = readFile.readAll();
    bf = by.data();
    readFile.close();

    memcpy(&aa, bf, 4);
    memcpy(&b, bf + 4, 1);
    memcpy(&c, bf + 5, 8);
    qDebug() << aa << b << c;

    return 0;
    return a.exec();
}

运行结果:
这里写图片描述

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //写文件
    int aa = 1;
    char b = 'c';
    double c = 2;
    int d = (int)c;
    QFile writeFile("1.dat");
    writeFile.open(QIODevice::WriteOnly);
    QDataStream out(&writeFile);
    char bbf[100];
    char *p;
    p = (char *)&aa;
    bbf[0] = p[0];
    bbf[1] = p[1];
    bbf[2] = p[2];
    bbf[3] = p[3];
    p = (char *)&b;
    bbf[4] = p[0];
    p = (char *)&d;
    bbf[5] = p[0];
    bbf[6] = p[1];
    bbf[7] = p[2];
    bbf[8] = p[3];

    out.writeRawData(bbf, 9);
    writeFile.close();


    //读文件
    QFile readFile("1.dat");
    readFile.open(QIODevice::ReadOnly);
    QByteArray by;
    char *bf;
    by = readFile.readAll();
    bf = by.data();
    readFile.close();

    int cc;
    memcpy(&aa, bf, 4);
    memcpy(&b, bf + 4, 1);
    memcpy(&cc, bf + 5, 4);
    qDebug() << aa << b << cc;

    return 0;
    return a.exec();
}

运行结果:
这里写图片描述

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 多种方式读写二进制文件 的相关文章

随机推荐

  • 基于stm32f103rct6的呼吸灯实现

    一 PWM 在stm32中 输出pwm的方式有很多 第一种是可以用普通IO口输出pwm 第二种是利用定时器的pwm的IO口或复用IO口 pwm端口 STM32 的定时器除了 TIM6 和 7 其他的定时器都可以用来产生 PWM 输出 其中高
  • 大型网站系统设计应考虑的问题

    大型网站系统设计应考虑的问题 1 服务器软件架构 集中服务 微服务 云服务 2 部署方案 分布式 集群部署 3 均衡负载方案 Nginx反向代理实现均衡负载 HAProxy Keepalived双机高可用均衡负载方案 4 缓存方案 redi
  • 导入和导出功能用例设计

    1 用例 2 用例模板 用例模板
  • 【ERP】概念_填制、修改、作废、删除凭证

    目录 1 概述 2 填制凭证 3 修改凭证 无痕修改和有痕修改 4 作废恢复凭证 删
  • 开放API调用了,通过API实现各类脑洞的时刻

    在3月2号 OpenAI公开了ChatGPT相关的API 可以通过API实现对ChatGPT的调用了 POST https api openai com v1 chat completions curl https api openai c
  • vue实现点击复制功能

    实现思路 通过模拟输入框的复制来完成对事件的复制 一 通过点击事件完成创建一个输入框 二 输入框要在正常的编辑状态下原生复制方法才会生效 三 完成上列操作后有移除输入框 代码 a style color 000000 复制链接 a copy
  • 使用canvas做动态背景

    参考自 https blog csdn net kiddd fu article details 78399629 在自己写网页的时候用了一个动态canvas作动态背景原本一直显示有问题 后来发现必须得把script的引用放在最后面 不然无
  • Android Jetpack(2):DataBinding的使用

    Android DataBinding 从入门到进阶 DataBinding 介绍 DataBinding是什么 DataBinding 是谷歌官方发布的一个框架 顾名思义即为数据绑定 是 MVVM 模式在 Android 上的一种实现 用
  • dataguard日常管理

    auther skate time 2009 08 02 dataguard日常管理 1 fail over 2 switchover 3 更改保护模式 4 常用命令和视图 fail over 1 如果在dataguard中做了fail o
  • thinkpad x1e 隐士进入bios

    thinkpad x1e 隐士进入bios 启动的时候 同时按 fn f1 两个键需要连续不停的按 bios页 同时按 fn f12 两个键需要连续不停的按 简单页 1 选择方向键startup 然后选择Boot按回车键 更改第一启动项从外
  • Pycharm报错Non-zero exit code (2)

    问题现象 通常我们拿到一个Python项目后 项目中有requirement txt文件 里面有列出需要安装的三方库 使用pycharm直接安装这些库时 报错 Non zero exit code 2 解决方案 第一种临时解决方案 是在py
  • 大佬为你揭秘微信支付的系统架构,你想知道的都在这里了

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由李跃森发表于云 社区专栏 李跃森 腾讯云PostgreSQL首席架构师 腾讯数据库团队架构师 负责微信支付商户系统核心数据库的架构设计和研发 PostgreSQL x2社区核心
  • mybatis Example条件查询

    Criterion是最基本 最底层的Where条件 用于字段级的筛选 Criteria Criteria包含一个Cretiron的集合 每一个Criteria对象内包含的Cretiron之间是由AND连接的 是逻辑与的关系 oredCrit
  • 2023 第十四届蓝桥杯模拟赛(第三期)题解

    文章目录 最小的十六进制 Excel的列 相等日期 取数 最大连通分块 哪一天 信号覆盖 清理水草 最长滑行 区间最小值 单调队列O n 优先队列O NlgN 线段树O NlgN 个人Java题解 据我所知题目一样的 可以参考一下 欢迎评论
  • 集成开放平台接口中心基于IdentityServer4的鉴权机制

    源宝导读 企业数字化生态建设中为解决集成多样性和资源统一管理的痛点引入企业级网关 网关作为资源访问的大门 身份认证鉴权是其业务的重中之重 本文将介绍企业级网关 天际集成开放平台是如何通过IdentityServer4来做到身份认证和鉴权业务
  • QT 5.6.1使用虚拟键盘,适用于arm-linux

    获取源码 https github com hanshuaipeng QtInputMethod GooglePinyin git 编译后得到的文件 包含全志A64 IMX6ULL和UBUNTU可用的 so文件 https download
  • 清华大学的计算机课程表,清华大学计算机专业课程表

    清华大学计算机专业课程表 应用泛函分析4学分 流形上的微积分4 秋 数论与编码 代数编码理论3 春 初等数论与多项式2 秋 应用统计3学分 必修不少于12学分 允许在院系教务部门认可下选修理学院的同类型课程 以下课程中必修4 门课 不少于1
  • AS 3.4.1 gradle问题

    编译后报错信息大概如下 Gradle s dependency cache may be corrupt this sometimes occurs after a network connection timeout Re downloa
  • 2023年国家护网0day-poc/exp漏洞全汇总(目前已更新到91个..实时更新中...)

    文章目录 前言 0x01 Sxf 报表系统 版本有限制 0x02 E Cology 某版本 SQL注入漏洞 0x03 某恒明御运维审计与风险控制系统xmlrpc sock任意用户添加漏洞 0x04 泛微 E Cology 某版本 SQL注入
  • Qt 多种方式读写二进制文件

    将文本数据写入二进制文件 然后从二进制文件中读出 还原为文本数据 include mainwindow h include