请教大神们这种情况如何用parser截取二进制流并保存?
bat吧
全部回复
仅看楼主
level 1
紫魚醬 楼主
本人完全没接触过编程,瞎研究一篇文章实在摸不着头脑了,所以请教一下各位大大。
是这样的,有一些zpk文件我需要解析,我用Beyond Compare查看其16进制代码,通过代码可以看到一个zpk文件里面包含一个png 一个jpg 一个aac音频 一个mp3音频(其中的图片音频代码也是按照下图这个顺序来,但但是每个zpk中的音频图片顺序不一样)。截图如下
可以根据mp3 jpg等文件头和尾 推测出其中音频和图片的代码 复制粘贴保存后即可。
但是问题来了,由于这些zpk文件较多,而且每个zpk中的音频图片顺序不一样,
那么如何写一个parser来自动截取并保存对应的代码呢?
希望大家提供一下思路,谢谢
2017年02月02日 06点02分 1
level 1
你得先解压
2017年02月02日 17点02分 3
可是这个不是rar格式呀,后缀改成rar也无法打开也无法解压
2017年02月03日 02点02分
level 12
不明觉厉
2017年02月03日 02点02分 7
level 1
紫魚醬 楼主
文章中说:只要记住每一个文件的头尾标识,然后按照这个zpk后面给出的jpg mp3等顺序来解析单个二进制段,就可以了。并且作者给出了parser的一部分代码,大神们请看一下其他的部分应该怎么补充怎么写呢?
switch (arrType[i])
{
case zpk_mp3:
pHeader = mp3Header;
pEnd = mp3Header2;
break;
case zpk_png:
pHeader = pngHeader;
pEnd = pngEnd;
break;
case zpk_jpg:
pHeader = jpgHeader;
pEnd = jpgEnd;
break;
case zpk_aac:
pHeader = aacHeader;
pEnd = NULL;
break;
default:
break;
}
现在面临的问题是不知道怎么写,没有思路
其中 已知jpg png 的文件头文件尾,已知aac的文件头但是文件尾不固定,mp3的文件头文件尾都不固定,头有时候是FF F1有时候是FF E3
2017年02月03日 03点02分 8
level 12
左转c++吧不谢
2017年02月03日 06点02分 12
level 13
首先要知道這個文件的長度和起始位置,然後fseek移動指針到指定位置再fread[滑稽]
2017年02月03日 15点02分 13
好的,谢谢!我在研究研究
2017年02月05日 05点02分
@紫魚醬 你把那個文章鏈接發來給我看一下吧,我很好奇這帖子為什麼會發到這,批處理不擅長處理這個[滑稽]
2017年02月05日 05点02分
@新闻🌟记者 http://www.cnblogs.com/fuckgiser/p/5983590.html 大神请过目 我是零基础小白,所以只要是跟IT有关的贴吧我都发了一下[狂汗]
2017年02月05日 06点02分
@紫魚醬 一來就弄這個,可以啊[滑稽],不過作者還是沒說具體怎麼讀,你要是沒耐心看16進制的話還是別弄了,免得受到打擊,先簡單的做起[滑稽]
2017年02月05日 06点02分
level 2
行了吧,经验拿好,小妹妹好好学习乖乖按时吃饭
2017年02月04日 10点02分 14
level 10
挖坟喽
2017年02月05日 06点02分 15
level 13
給你寫個示例
//某文件頭和尾
wchar_t H=0xFFD8,E=0xFFD9;
FILE *fp=0,*fp2=0;
fp=fopen("xxx.zpk","rb");//打開zpk文件,rb的r表示讀,b表示二進制,w表示寫
fp2=fopen("輸出.jpg","wb");
if(fp){
wchar_t T=0;//臨時存儲數據
bool st=0;//開始標誌
while(fread(&T,sizeof(wchar_t),1,fp)){//如果讀到數據就循環,讀到文件尾就會因為沒數據停止
if(T==H)st=1;//如果讀到頭,st變成1,下面會開始寫
if(st)fwrite(&T,sizeof(wchar_t),1,fp2);//&表示取指針(地址),sizeof表示取得這個類型的大小,wchar一般是2,1表示數量,fp2表示要寫的文件指針,fopen系列的函數都差不多
if(st&&T==E)break;//如果讀到尾,中斷,&&表示兩個都滿足
}
}
fclose(fp);//關閉文件
fclose(fp2);
非常詳細,更神奇的是還是手機碼的[滑稽]
這種方法要是文件大小不是2的倍數就不行了
=表示賦值,==表示判斷是否相等[滑稽]
2017年02月05日 07点02分 16
哇星星眼[乖]~谢谢大神哈~我有空就研究研究[花心]
2017年02月07日 07点02分
level 12
up
2017年02月09日 02点02分 17
1