没有项目描述
wick的Python项目详细描述
灯芯
wick是一个python命令行工具,它自动生成用于处理二进制数据的文件i/o源代码。
为什么?
我正在做一个涉及到逆向工程文件格式的项目,我发现大多数数据结构往往由几个简单的数据结构组成。我还注意到,更简单的结构都是非常典型的。所以我创建了这个工具来为我编写简单的结构,我可以做更有趣的工作,将它们组合成更大的结构。
支持的目标语言
- C
- javascript
- Python
安装
$ pip install wick
用法
$ wick example.h Python
它到底做了什么?
让我们看一个具体的例子。
假设我们有一个二进制数据,它是由一个字符串名和一个整数id表示的一系列记录。首先,我们创建一个record.h文件,该文件包含此数据的c结构表示:
// record.h// Simple RecordstructRecord{// Record namecharname[64];// Record id.unsignedcharid;};
然后对文件运行wick
:
$ wick record.h Python
然后将创建一个record.py文件,其内容如下:
# record.pyimportstructclassRecord:"""Simple Record object Attributes: name: Record name id: Record id. """format='<64sB'size=struct.calcsize(format)__slots__=('name','id')def__init__(self,name,id):self.name=name.split(b'\x00')[0].decode('ascii')iftype(name)isbyteselsenameself.id=id@classmethoddefwrite(cls,file,record):record_data=struct.pack(cls.format,record.name.encode('ascii'),record.id)file.write(record_data)@classmethoddefread(cls,file):record_data=file.read(cls.size)record_struct=struct.unpack(cls.format,record_data)returnRecord(*record_struct)
然后我们可以将这段代码导入到python中,do work。
读取数据
withopen(path,'rb')asfile:rec=Record.read(file)
写入数据
withopen(path,'wb')asfile:rec=Record(b'name',0)Record.write(file,rec)
打开大量数据
importstruct# Assuming the file only contains Record datawithopen(path,'rb')asfile:recs=[Record(*chunk)forchunkinstruct.iter_unpack(Record.format,file.read())]
贡献
有一个错误修复或一个新的功能,你想看到在威克?把它送到我们这边!请确保您创建了一个问题来解决您的修复/功能,以便我们可以讨论您的贡献。
- 离开这个回购协议!
- 创建功能分支:
git checkout -b features/add-javascript-code-generator
- 提交更改:
git commit -m 'Implemented Javascript code generator'
- 推动分支:
git push origin add-javascript-code-generator
- 提交请求。
- 创建一个issue。
许可证
麻省理工学院
全文见license文档。