虽然自己还没完全懂得汉化怎么做,但根据安仔放下来的任务做做还是蛮有想法的,毕竟针对特定文件的一次性程序和适用各种类型文件的通用程序,所需要写的代码很不一样,因为为了以后能更好的利用原先的代码,必须尽量避免写死一些参数。这里我就感慨几种自己用到的方法。
1.宏定义法
#define HEAD_LENGTH 8 //文件头名称的长度 #define PAK_COUNT 31 //需打包的文件的个数 #define PAK_START_OFFSET (0x90) //第一个包开始的偏移位置
这个就是教科书上的方法,也是宏定义第一种也最通用的方法,对于常量确实很有用。不过个人总觉的这种常量应该是几个程序共同的数值,而不是一个程序一种常量值,所以上面代码中的各种数值个人感觉不适宜用宏定义法,除非该程序只特定解决一个包文件。(这正是我最不想写的一次性程序)
如何在程序中自动获得这些常量的值(其实这些常量相对于不同的包还是变量),暂时没想到简单的方法,因为只做了两个打包文件和一个拆包文件,获取这些常量通用的规律还没找到。就算找到了还没想到如何用简洁的代码表示出来。
2.函数化法
inline void getSrcName_i (char *srcName, char *outName, ULONG i) { sprintf (srcName, "%s%d", outName, i + 1); }
这个函数体只有一句,我仍然把它作为一个函数,为的就是以后修改方便,因为貌似每次各个小包的命名方式都不一样,以后想办法在拆包时就统一各个小包的命名规则吧。而且小包是否有压缩,命名方式又会有不同,是否包名中间加入lz77的标识我也说不准。
o(╯□╰)o:刚看自己代码才发觉拆包程序生成的包的文件名太复杂了,害的打包程序要这么说明:
/*
* 打包工具
*
* 参数为需要生成的包名文件,格式为 *.PAK
* 需要打包的包名要求格式为 _*.PAK_$$.PAK ($$代表小包的序号,比如84)
* 或者 _*.PAK_$$.zip.PAK ($$代表小包的序号,比如84)
*
*/
以后一定要在拆包的函数里面写好生成什么格式的包名,省的打包时文件名字符串处理一大堆事情
晕乎乎的,不写了,睡觉去了。