加载中,请稍候…

资讯 英语
舍得茶室 方法
SuperMemo Rosetta
TellMeMore Aboboo
课程 视频
软件 电子书
学苑 博客
空间 微博

SMPAK文件揭秘

2013-07-11 20:48:45   来源:舍得学习力博客  作者:舍得

舍得所知道的最早研究并揭开SMPAK神秘面纱的是m4gic童鞋,当时他画了几张图,一一讲解了smpak文件中的奥秘,现在舍得根据自己的实践,用文字来阐述一下,可让更多的人迅速熟悉其中的规律,为实现smpak文件的自由制作创造机会。

一、头部

依先后顺序:
8字节:-SMArch-
2字节:版本号,01 01
2字节:锁定标识,01 00
4字节:EntrChnk的偏移值
4字节:NameChnk的偏移值
8字节:DataChnk的标志
以上共计28字节.

严格地讲,DataChnk标志不应归入头部,因为每个数据区块都有此标志.

 

二、数据区DataChnk

每组数据(一个页面文件或媒体文件)占一个数据区块,每个区块前均有DataChnk标志(DataChnk标志占8字节)。

 

三、文件列表区EntrChnk

此区相当于SMPAK里的索引,记录了文件名和文件内容的位置和长度等信息。

标志占8个字节,后面紧跟着的文件总数,占4个字节。然后是每个文件的相关信息,其格式如下(以第1条为例):
    名称偏移值1:NameChnk offset1 (4字节)
    长度1(2字节)
    压缩标记1:(flags,2字节,表示内容是否压缩)
    数据区偏移值1:DataChnk offset1 (4字节)
    数据库尺寸1(相当于长度):DataChnk size1(4字节)
总 共一个文件信息占16字节,依此循环.因为有文件总数这个参数,有多少个文件,只要用一个循环,就可以把上述的各项信息一一读取出来.由名称偏移值1可得 到文件名位置,加上长度1可返回文件名;通过察看压缩标记1,可判断是否要调用压缩程序;由数据区偏移值1可得到文件内容储存位置,加上尺寸可返回文件内 容.

 

四、文件名储存区NameChnk

    NameChnk标志占8字节
    随后是NameChnk区的总长度,8字节,后面还有2个字节,作用不详.在这2字节后边,就是文件名列表(注意和文件列表区分开来).

 

如果是解包操作的话,只消将EntrChnk里的数据取出,然后分别取文件名和文件内容,写入文件就OK了.其实打包的操作正好与此相反,先把各个 数据计算好,然后分别将三个区的DataChnk、EntrChnk和NameChnk加上文件头写入文件即可。遗憾的是python处理二进制文件读写 颇有不便之处,不然的话,打包应该是比较容易实现的.

本文版权归舍得英语魔法学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客



【TAGS】

【相关文章】
  • 【十二月福利】《驾考宝典》之科目四(SuperMemo)
  • 如何打开SuperMemo课程中隐藏的练习?
  • SuperMemo新手指南之版本的选择
  • SuperMemo UX新手指南:如何手动加入音频,并自动播放
  • SuperMemo UX问答篇:如何用SuperMemo来学好拼写?
  • SuperMemo问答篇:如何用SuperMemo来学习一门编程语言
  • SuperMemo UX问答篇:巩固练习中的评分并不影响学习进度
  • SuperMemo UX问答篇:随时修改课程内容
  • 如何利用SuperMemo词库转换精灵制作iphone版词库?
  • SuperMemo,你的超级笔记——用增量阅读搞定教科书
  • 来顶一下
    返回首页
    返回首页

     分享: 分享到QQ空间 转贴到开心网 分享到校内网 添加到百度搜藏 Sina ViVi 添加Google书签 Yahoo收藏 添加到鲜果 转发到新浪微博 我要评论】【进入论坛】【社区空间
    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表
    关于我们 | 诚聘英才 | 友情链接 | 联系我们 | 意见反馈 | 网站地图 | 版权申明 |
    舍得学苑 备案号:冀ICP备11024081号-1
    Copyright © 2009-2015 eMagic.org.cn, All rights reserved.