Qt6之通用文件格式.dat

news2024/11/15 6:45:45

 dat文件,在Windows中大量存在,到处都有。如下图edge浏览器安装目录下就有一个dat文件,如果你强行打开,发现它是乱码的。

一、什么是dat文件

DAT 文件格式只是一种通用格式,它在文件中包含任何类型的数据,它可能包含二进制或文本格式的数据,通常以 .dat 扩展名保存。

通常不能说某个特定的软件或程序负责创建 DAT 文件,这些文件仅由创建它们的应用程序特别访问。

备注:通常都是二进制,优势是体积小,不被轻易修改,各个语言都能通用;

二、Qt内相关概念

Qt 使用 QFile 和QDataStream 进行二进制数据文件的读写。QFile 负责文件的 IO 设备接口,即与文件的物理交互,QDataStream 以数据流的方式读取文件内容或写入文件内容。

 QDataStream类实现了 C++ 基本数据类型的序列化,如charshortintchar *等。更复杂数据的序列化是通过将数据分解为原始单元来完成的。有五个常用方法:

1.readRawData(char *s, int len)函数

该函数从流中最多读取len个字节到指针s指向的存储区域中并返回读取的字节数;

它会读取 len 个字节的数据,并且保存到指针s 指向的存储区

2. writeRawData (const char * s , int len )函数

len个字节从s写入流。返回实际写入的字节数,如果出错则返回 -1;

它将会向文件流连续写入len 个字节的数据,这些字节数据保存在指针 s 指向的起始地址里;

3.writeBytes (const char * s , uint len )函数

写入字符串时:其中参数s 是一个指向字节型数据的指针,len 是字节数据的长度。

writeBytes在写入数据时,会先将len 作为一个 quint32类型写入数据流,然后再写入len 个从指针s 获取的数据。writeBytes()适合于写入字符串数据,因为在写入字符串之前要先写入字符串的长度,这样在读取文件时,就能知道字符串的长度,以便正确读出字符串。

4.readBytes(char *&s, uint &len)函数

读取字符串时,使用readBytes(函数时,会先自动读取前4 个字节数据作为 quint32 的数据并赋值给 len 参数。

因为 len 是以引用方式传递的参数,所以,len 返回读取的数据的字节数。然后根据 len 的大小读取相应字节的数据,存储到指针 s 指向的存储区。

5.setByteOrder()字节序

在一些跨平台场景下,有时会涉及到大端字节序和小端字节序,如果不指定可能读取就会发生错误,它就有两个参数QDataStream::BigEndianQDataStream::LittleEndian,注意读写保持一致就行。

备注:不是必须项,非跨平台可以不指定;

类似的还有魔术标签版本号,这些其实都可有可无,特定场景使用;

QDataStream aStream(&aFile);
aStream.setByteOrder(QDataStream::LittleEndian);

以下为魔术标签和版本号,这些用了读写就得一致; 

 熟悉以上5个方法后,再结合QBytearray就可以应对读写了。

三、读写dat文件

3.1 写入字符串形式

bool MainWindow::WriteDatStrFile()
{
    QFile aFile("D:/test.dat");
    if(!aFile.open(QIODevice::WriteOnly))
    {
        return false;
    }
    QByteArray btArray;
    QString str1="ab让世界爱上中国造cd";
    QDataStream aStream(&aFile);
    btArray=str1.toUtf8();
    aStream.writeBytes(btArray,btArray.length());
    aFile.close();
    return true;
}

3.2 读取字符串形式

bool MainWindow::ReadDatStrFile()
{
    QFile aFile("D:/test.dat");
    if(!aFile.open(QIODevice::ReadOnly))
    {
        return false;
    }
    char* buf=NULL;
    uint strLen;
    QDataStream aStream(&aFile);
    aStream.readBytes(buf,strLen);
    aFile.close();
    if(buf != NULL)
    {
        QByteArray btArray= QByteArray(buf,strLen);
        qDebug()<<"read str="<<QString::fromUtf8(btArray);
        delete buf;
        buf=NULL;
    }
    return true;

}

 

 readRawData和writeRawData就不举例了,在实际存储中dat文件,几乎可以存储所有文件格式,图片、音乐、视频等等,只有谁创建的才知道应该用什么格式去访问,否则是一大堆乱码。也许就如《黑客帝国》所说,我们认为的真实世界会不会就是高维世界生命体编写的代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 TensorRT、卡尔曼滤波器和 SORT 算法进行实时对象检测和跟踪:第 1 部分训练模型

实时物体检测和跟踪在监控、自动驾驶和机器人等各种应用中至关重要。这些任务需要能够实时处理高分辨率视频流的高效算法。近年来,基于深度学习的目标检测算法(例如YOLO、SSD和Faster R-CNN)在图像和视频中的目标检测和定位方面显示出了令人印象深刻的结果。然而,这些算法的…

JVM面试题详解

JVM介绍 JVM是什么&#xff1f; JVM由哪些部分组成&#xff1f;运行流程是什么&#xff1f; JVM组成 什么是程序计数器 你能给我详细的介绍Java堆吗&#xff1f; 什么是虚拟机栈&#xff1f; 堆栈的区别是什么&#xff1f; 能不能解释一下方法区 你听过直接内存吗 类加载器 …

tx视频 wx小程序 视频缓存方案

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!tx视频 wx小程序 视频缓存方案 环境 win10CharlesInternet Download Manager抓包分析 搜索关键词可以很容…

《生活教育》期刊简介及投稿邮箱

《生活教育》期刊简介及投稿邮箱 《生活教育》杂志创办于1934&#xff0c;是中华人民共和国教育部主管的国家重点学术期刊&#xff0c;国家级期刊&#xff0c;中国知网全文收录G4期刊&#xff0c;它的理论是陶行知教育思想的主线和重要基石&#xff0c;陶行知的教育理论&#…

【力扣算法06】之 _2544_ 交替数字和- python

文章目录 问题描述示例1示例 2示例 3提示 思路分析代码分析完整代码运行示例效果截图 完结 问题描述 给你一个正整数 n 。n 中的每一位数字都会按下述规则分配一个符号&#xff1a; 最高有效位 上的数字分配到 正 号。 剩余每位上数字的符号都与其相邻数字相反。 返回所有数字及…

这5款多 GPU 渲染器提升渲染能力,赶紧用起来

多 GPU 渲染的强大功能可以使您的渲染能力增加一倍、三倍或更多。使用合适的多GPU渲染引擎可以帮助您在短时间内以更快的速度获得高质量的产品。什么是真正的多 GPU 渲染&#xff1f;最好的多 GPU 渲染引擎是什么&#xff1f; 什么是多 GPU 渲染和多 GPU 渲染引擎&#xff1f;…

编译mysql8.0.33遇见错误libstdc++.so.6: version CXXABI_1.3.9 not found

1 现象 在执行make编译mysql8.0.33时&#xff0c;遇见报错信息&#xff1a; /lib64/libstdc.so.6: version CXXABI_1.3.9 not found&#xff0c; 查看版本发现只是1.3.7。 2 解决方案 2.1 解决方案1 安装glibc-2.18。 2.1 解决方案2 执行如下指令&#xff0c;将新文件替…

[微信小程序] movable-view 可移动视图容器 - 范围问题

movable-view 可移动视图容器 可移动视图容器&#xff0c;在页面中可以拖拽滑动。movable-view必须在 movable-area 组件中&#xff0c;并且必须是直接子节点 <view><movable-area style"width: 750rpx;height: 200rpx;background-color: gainsboro;">&l…

【力扣算法10】之 7. 整数反转 python

文章目录 问题描述示例1示例2示例3示例4提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &…

(Onenet)STM32L+BC20+MQTT协议传输温湿度,ADC,电压,GPS数据到Onenet物联网平台

1、材料准备 准备以下材料 2、设备连接 2.1 插入物联网卡 首先把BC20核心板从开发板上拆下来 然后将物联卡放置在BC20核心板内 物联卡放置完成将BC20核心板重新插入到开发板内&#xff08;注意不要弄错方向&#xff09; 同时接入天线 2.2 连接ST-Link仿真器 用3条杜邦线接…

python接口自动化(三十四)-封装与调用--函数和参数化(详解)

简介 前面虽然实现了参数的关联&#xff0c;但是那种只是记流水账的完成功能&#xff0c;不便于维护&#xff0c;也没什么可读性&#xff0c;随着水平和技能的提升&#xff0c;再返回头去看前边写的代码&#xff0c;简直是惨不忍睹那样的代码是初级入门的代码水平都达不到。接下…

股票开户手续费最低的券商有哪些?揭秘券商成本佣金,交易费率原来可以这么低!

哪个券商手续费最低实际上是没有这种说法的&#xff0c;想要低手续费一定要联系线上客户经理办理开户&#xff0c;是可以和线上客户经理协商降低手续费的&#xff0c;一定要通过线上客户经理特殊渠道开户&#xff0c;才能享受低手续费账户&#xff0c;还可以办理到vip账户&…

Python中可以用三种方法判断文件是否存在

目录 前言1.使用os模块2.使用Try语句3. 使用pathlib模块尾语 &#x1f49d; 前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 通常在读写文件之前&#xff0c;需要判断文件或目录是否存在&#xff0c;不然某些处理方法可能会使程序出错。 所以最好在做任何操作之前&#xff…

spring复习:(22)实现了BeanNameAware等Aware接口的bean,相应的回调方法是在哪里被调用的?

AbstractAutowireCapableBeanFactory的doCreateBean用来创建bean, 其中调用了initializeBean方法对bean进行初始化 initializeBean包含如下代码&#xff1a; 而invokeAwareMethods代码如下&#xff1a; 可见其分别判断是否实现了BeanNameAware接口、BeanClassLoaderAware接口…

【Linux指令sudo与Linux编译器-gcc/g++】

目录 一、sudo1.1为什么我用不了sudo命令1.2如何将普通用户添加到信任列表里面 二、Linux编译器-gcc/g使用2.1背景知识2.2gcc如何完成上面的4个功能&#xff1f;2.3函数库 一、sudo sudo是linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令…

金融行业数据安全相关法律法规及政策汇总

如今随着大数据和“互联网”等新兴技术的拓展&#xff0c;数据的作用也在不断凸显&#xff0c;金融业是产生和积累数据量最大、数据类型最丰富的行业之一&#xff0c;数据安全与个人信息保护在新时代也面临新的风险与挑战。 根据《中国银行保险报》与亚信网络安全产业技术研究院…

CCPC 2022济南站+2020威海站+2019秦皇岛站+2022绵阳站(部分)(暑假集训)

目录 Tower Frozen Scoreboard Identical Parity​编辑 Best Carry Player Stack Sort Invoker MUV LUV EXTRA Forest Program Angle Beats Catch You Catch Me Tower 思路&#xff1a; 提前进行/2的预处理操作&#xff0c;操作之后 &#xff0c;在记录下要达到一样的步骤…

JavaFX 基础

1.JavaFX应用的程序基本结构 窗口(stage)&#xff1a;窗口里面可以设置场景&#xff0c;但是一次只能显示一个场景。 场景(scene)&#xff1a;场景可以添加UI组件图的树形结构。 根节点(parent)&#xff1a;根节点设置为一个布局&#xff0c;放置不同的节点(组件)。可以在根节…

备战秋招 | 笔试强训2

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、使用printf函数打印一个double类型的数据&#xff0c;要求&#xff1a;输出为10进制&#xff0c;输出左对齐30个字符&#xff0c;4位精度。以下哪个选项是正确的&#xff1f; A. %-30.4e B. %4.…

白皮书案例解读|数字孪生与港口的结合会碰撞出什么样的火花呢?

以下案例来自于《数字孪生世界白皮书&#xff08;2023版&#xff09;》 领取方式&#xff1a;公众号「EasyV数字孪生」后台回复「白皮书」即可领取&#xff01; 嗨&#xff0c;我又出现啦&#xff5e;今天想和大家聊聊关于港口场景数字孪生技术的应用&#xff0c;欢迎大家踊跃…