level 1
狂野灰狼
楼主
不累的王
普通会员
发贴: 339
积分: 0
来自:
注册日期: 2006-05-26
发表时间: 2008-04-10 02:26:40
--------------------------------------------------------------------------------
yy使用C语言为Python编写纠错码模块
去年一个项目的开发中因为需要使用到纠错码,所以自然而然的接触到了rscode。
rscode 是Reed-Solomon纠错算法的一种实现,被广泛的使用于Audio CD和CD-ROM。关于rscode更详细
的描述,请前往其官方网站查看(http://rscode.sourceforge.net/)。
rscode 使用标准C编写,优点自不必说,跨平台、执行效率高。可C代码也有其固有的麻烦,每次调试都
需要编译,开发过程远不如脚本语言来得阳春白雪。于是乎,笔者生出一个想法:何不将其编译为Python模
块?这样在测试程序逻辑的时候可以省去不少的麻烦。现在将过程记录如下,希望对大家有所帮助。
首先在官方网站下载源文件。
解压源代码,并将其编译为静态链接库。
项目的环境为Win32,不过因为笔者的拧巴性格,还是使用了MingGW系列的工具对其进行编译。
执行make,得到静态链接库:
libecc.a
接下来开始为我们的模块编写C源码。
/*
* RsCode.c
*/
#include <python.h>
#include "ecc.h"
//编码部分
//包裹函数调用的实际编码函数
//参数依次为:原文buffer指针,buffer长度,得到的rscode编码串的指针
void _encode(char* data, unsigned long size, char* codeword)
{
//调用rscode库提供的两个函数,分别完成初始化和编码工作。
initialize_ecc();
encode_data(data, size, codeword);
}
//编码部分的包裹函数,这个函数将和CPython的虚拟机进行亲密接触 :)
//函数参数的定义。self为当前模块的引用;args为传入这个函数的参数,可以是任意数据类型。当
然,如果传入参数与处理过程不匹配的话,就会产生一个异常。
PyObject* wrap_encode(PyObject* self, PyObject* args)
{
char* data;
2010年03月22日 06点03分
1
普通会员
发贴: 339
积分: 0
来自:
注册日期: 2006-05-26
发表时间: 2008-04-10 02:26:40
--------------------------------------------------------------------------------
yy使用C语言为Python编写纠错码模块
去年一个项目的开发中因为需要使用到纠错码,所以自然而然的接触到了rscode。
rscode 是Reed-Solomon纠错算法的一种实现,被广泛的使用于Audio CD和CD-ROM。关于rscode更详细
的描述,请前往其官方网站查看(http://rscode.sourceforge.net/)。
rscode 使用标准C编写,优点自不必说,跨平台、执行效率高。可C代码也有其固有的麻烦,每次调试都
需要编译,开发过程远不如脚本语言来得阳春白雪。于是乎,笔者生出一个想法:何不将其编译为Python模
块?这样在测试程序逻辑的时候可以省去不少的麻烦。现在将过程记录如下,希望对大家有所帮助。
首先在官方网站下载源文件。
解压源代码,并将其编译为静态链接库。
项目的环境为Win32,不过因为笔者的拧巴性格,还是使用了MingGW系列的工具对其进行编译。
执行make,得到静态链接库:
libecc.a
接下来开始为我们的模块编写C源码。
/*
* RsCode.c
*/
#include <python.h>
#include "ecc.h"
//编码部分
//包裹函数调用的实际编码函数
//参数依次为:原文buffer指针,buffer长度,得到的rscode编码串的指针
void _encode(char* data, unsigned long size, char* codeword)
{
//调用rscode库提供的两个函数,分别完成初始化和编码工作。
initialize_ecc();
encode_data(data, size, codeword);
}
//编码部分的包裹函数,这个函数将和CPython的虚拟机进行亲密接触 :)
//函数参数的定义。self为当前模块的引用;args为传入这个函数的参数,可以是任意数据类型。当
然,如果传入参数与处理过程不匹配的话,就会产生一个异常。
PyObject* wrap_encode(PyObject* self, PyObject* args)
{
char* data;