pak文件的打包和解包
pak格式的文件 一般游戏有资源 游戏素材会打包放进去
比如游戏语音 游戏多加点语音 多加一些贴图资源
外部文件实现的
素材--->pak文件--->用的时候从文件中取出来
文件的打包
1 #include<iostream> 2 #include<fstream>//观于文件的头函数 3 using namespace std; 4 5 struct fileInfo 6 { 7 int fileSize;//文件大小 8 int fileOff;//文件在pak中的偏移 9 int fileNameSize;//文件名的长度 10 char* fileName;//文件名 11 }; 12 int main() 13 { 14 fileInfo pic[4] = { { 0, 0, 0, "背景.jpg" }, { 0, 0, 0, "人物.jpg" }, { 0, 0, 0, "箱子.jpg" }, { 0, 0, 0, "目的地.jpg" } }; 15 //初始化结构体 给结构体内存放数据 16 int listNum = 4, listSize = 8; 17 18 fstream resFile[4];//源文件 19 fstream srcFile;//打包之后的文件 20 for (int i = 0; i < 4; i++) 21 { 22 resFile[i].open(pic[i].fileName, ios::in | ios::binary);//打开文件 文本或二进制文件 23 resFile[i].seekg(0, ios::end);//将文件指针移动到文件末尾end 24 pic[i].fileSize = resFile[i].tellg();//得到文件的大小tellg 25 pic[i].fileNameSize = strlen(pic[i].fileName);//求文件名长度 26 listSize += 4 + 4 + 4 + pic[i].fileNameSize;//加上单条索引表的长度 27 // 文件大小4 +文件偏移量4+ 文件名大小4 +文件名长度 28 } 29 for (int i = 0; i < 4; ++i) 30 { 31 if (i == 0)//第一个文件 32 { 33 pic[i].fileOff = listSize;//第一个文件的偏移量就是索引表大小 34 } 35 else 36 { 37 pic[i].fileOff = pic[i - 1].fileOff + pic[i - 1].fileSize; 38 //计算后面的文件偏移量 39 } 40 } 41 srcFile.open("new.pak", ios::out | ios::binary);//准备写入文件 42 43 srcFile.write((char*)&listSize, sizeof(int));//写入索引表的大小和索引表的个数 44 srcFile.write((char*)&listNum, sizeof(int)); 45 46 for (int i = 0; i < 4; ++i)//写索引表 47 { 48 srcFile.write((char*)&pic[i].fileSize, sizeof(int)); 49 srcFile.write((char*)&pic[i].fileOff, sizeof(int)); 50 srcFile.write((char*)&pic[i].fileNameSize, sizeof(int)); 51 srcFile.write(pic[i].fileName, pic[i].fileNameSize); 52 } 53 54 for (int i = 0; i < 4; ++i)//写入文件内容 55 { 56 resFile[i].seekg(0, ios::beg);//将文件指针移动到文件开头 57 while (!resFile[i].eof())//写文件 58 { 59 srcFile.put(resFile[i].get()); 60 } 61 srcFile.seekp(-1, ios::cur);//删掉一个字节 避免多写入数据 62 resFile[i].close();//写完关闭 63 } 64 65 srcFile.close(); 66 67 68 cin.get(); 69 return 0; 70 }
//运行后将文件打包到new.pak中
文件的解包
1 #include<iostream> 2 #include<fstream> 3 using namespace std; 4 5 struct fileInfo 6 { 7 int fileSize;//文件大小 8 int fileOff;//文件在pak中的偏移 9 int fileNameSize;//文件名的长度 10 char fileName[128];//文件名 11 }; 12 13 14 int main() 15 { 16 fstream file; 17 file.open("new.pak", ios::in | ios::binary);//读取文件 18 fileInfo pic[4];//写文件的时候大小可能不止四个 19 int listSize, listNum;// Num是索引表的个数 20 21 file.read((char*)&listSize, sizeof(int));//读到索引表的大小 22 file.read((char*)&listNum, sizeof(int)); 23 24 //读取每条索引的内容 25 for (int i = 0; i < listNum; ++i) 26 { 27 file.read((char*)&pic[i].fileSize, sizeof(int)); 28 file.read((char*)&pic[i].fileOff, sizeof(int)); 29 file.read((char*)&pic[i].fileNameSize, sizeof(int)); 30 file.read(pic[i].fileName, pic[i].fileNameSize);//需要注意\0 31 pic[i].fileName[pic[i].fileNameSize] = '\0'; 32 cout << i << "个文件的内容------------------" << endl; 33 cout << pic[i].fileSize << endl; 34 cout << pic[i].fileOff << endl; 35 cout << pic[i].fileNameSize << endl; 36 cout << pic[i].fileName << endl; 37 } 38 fstream res[4];//大小其实用vector或者new好一点 listNum 39 40 41 //前面有文件大小和文件偏移量 如果读取特定的文件 可以直接用索引中的大小和偏移量读取 42 for (int i = 0; i < listNum; ++i) 43 { 44 res[i].open(pic[i].fileName, ios::out | ios::binary); 45 for (int j = 0; j < pic[i].fileSize; ++j) 46 { 47 res[i].put(file.get()); 48 } 49 res[i].close(); 50 } 51 52 53 file.close();//关闭文件 54 cin.get(); 55 return 0; 56 }
//运行exe文件将图片文件解包
转载于:https://www.cnblogs.com/liugangjiayou/p/11388142.html
pak文件的打包和解包相关推荐
- android 根目录 文件 打包,Android image文件的打包和解包
Android image文件的打包和解包 平台:msm8909+android5.1 用file *查看img文件的类型: 图1 Ramdisk.img和ramdisk-recovery.img为g ...
- linux 加载 iso,Linux iso文件加载和解包的用法
Linux iso文件已被广泛应用但是也在不断的更新,这里介绍Linux iso文件安装设置使用,帮助大家安装更新Linux iso文件系统.软件包管理 之Linux Fedora 软件包管理器sys ...
- Python赋值、打包和解包,90%人不清楚的知识点!
人生苦短,快学Python! 关于赋值.打包和解包这 3个概念,我觉得有必要做一个分享,因为很多朋友确实不清楚. 如果有这样一个元组t: >> t = ('foo', 'bar', ' ...
- linux 文件的打包和解压
文件的打包和解压:tar tar -czf name.tar.gz /etc 一般情况下使用-czf参数,c 为创建新的存档.z 为指定压缩方式为gzip( j 为bzip2,J 为xz)(要加后缀: ...
- rtp h264打包和解包
1.学习思路 在了解rtp对h264数据的打包之前,需要对rtp.h264的一些基本概念有一个初步的了解,然后再使用rtp对h264的打包解包做解析 2.rtp认知 实时传送协议(Real-time ...
- Python从入门到实践:打包和解包(*和**)的使用
目录 一.打包参数 二.解包参数 三.几点注意 *和**在函数的定义和调用阶段,有着不同的功能,并且,*和**不能离开函数使用! 一.打包参数 * 的作用:在函数定义中,收集所有位置参数到一个新的元组 ...
- [oeasy]python0019_ 打包和解包_struct_pack_unpack
打包和解包 回忆上次内容 ASCII 由这样几类字符构成 英文大写字符 英文小写字符 数字 符号 电报时代对于英文.数字的编码 使用的是摩斯电码 这摩斯电码是3进制的编码方式 长短空 怎么演化成asc ...
- asar软件包linux,ASAR文件查看打包解包工具下载-ASAR文件查看打包解包工具v2018.07.12免费版-ucbug软件站...
ASAR文件查看打包解包工具是一款能够帮助用户对ASAR文件进行管理的工具,通过ASAR文件查看打包解包工具能够对文件进行查看.打包.解包等功能,有需要的可以下载使用. 功能介绍 electron的a ...
- python基础第五课--从字符串中打包和解包大整数(小白piao分享)
#4.从字符串打包和解包大整数 #将一个字符串解包成一个大整数,将一个大整数打包成一个字符串 #4.1 解决方案: #假设程序需要处理一个有16个元素的字节串,其中保存着一个128位的大整数 data ...
最新文章
- python图像相似度识别_一个用SIFT特征比较图像相似度的python小程序
- boost::log::sinks::file用法的测试程序
- 搞笑之----普通话
- nginx+upsync+consul 构建动态nginx配置系统
- Mysql Type中的all和index区别?
- SharePoint2007安装图文详解二:安装AD(活动目录)及DNS
- NEWSCTF第二届--官方wp(2021.6.1萌新赛)
- ESP8266教程4 — ESP8266 智能配网
- Unable to instantiate service com.baidu.android.pushservice.PushService: java.lang.ClassNotFoundExc
- PID到底是个啥?来给你讲个故事
- 通过IP连接oracle数据库
- 华为交换机路由器consle忘记密码该怎么办?
- WT2605-24SS音频解码芯片,实现宠物(玩具)喂食器远程更新语音技术方案解析
- matlab能画五维吗,进化算法之粒子群算法和Matlab实现(多维)
- 【资源】重磅!清华大学网上课程面向全国免费开放!无需登录、注册!在家上清华!...
- java lambdamart库,LambdaMART笔记
- 微信小程序在wxml中的数据保留小数和取整
- MedSegDiff
- (分享)2017云栖大会知识图谱专场
- 测试经理的工作以及素质
热门文章
- rust卡领地柜权限_rust一个领地柜有多大范围 | 手游网游页游攻略大全
- 如何扩大计算机运行内存,运行内存,小编教你如何扩大电脑的运行内存
- word press html,wordpress广告插件24款 管理网站广告代码很方便
- Codeforces Round 775(Div.2) Problem C Weird Sum(匿名函数的使用)
- 网易mc显示服务器异常,明日之后:一天之内3次服务器异常,网易果真是“土豆服务器”!...
- 51单片机实现两路AD检测、数码管显示、串口获取
- Java基础练习题_05
- 优雅代码的秘密,都藏在这6个设计原则中
- 第38.1节 osg加载大tif-编译vpb
- R语言高维数据的pca、 t-SNE算法降维与可视化分析案例报告