用c的写python模块的演示

转载 2012年03月26日 00:30:53

引用http://www.douban.com/note/19345973/


用c的写python模块的演示

2008-10-06 14:05:19
不说话,贴代码

uuxx/test.py

________________________

#!/usr/bin/env python

import uuxx
for i in range(111):
    filename=uuxx.uufilename()
    print filename,len(filename)

________________________

uuxx/setup.py
________________________

#!/usr/bin/python

from distutils.core import setup, Extension
setup(
    name = "uuxx",
    version = "1.1",
    author = "zsp",
    author_email = "zsp007@gmail.com",
    url = "http://zsp.javaeye.com",
    description = "uuid for more things",
    license = "GPL",
    classifiers = [
        "License :: GPL",
        "Programming Language :: C++"],
    ext_modules = [
        Extension(
            "uuxx",
            ["uuxx.cpp"],
            include_dirs = ["/usr/include/"],
            libraries = ["uuid","util"]
        )
    ]
    )

________________________


uuxx.cpp
________________________

 

extern "C" {
#include <uuid/uuid.h>
#include <Python.h>
}

void base64_encode(const void * pdata,const unsigned long data_size, void * out_pcode)
{
static const unsigned char base64char[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_!" ;

if (data_size <=0 ) return ;

const unsigned char * pS = (const unsigned char *)pdata;
const unsigned char * pSEnd = &pS[data_size];
unsigned char * pD =(unsigned char *)out_pcode;

for (;pS <pSEnd-2 ;pS+=3 ,pD+=4 )
{
pD[0 ] = base64char[pS[0 ]>> 2 ];
pD[1 ] = base64char[0x3F & (pS[0 ] <<4 | pS[1 ]>> 4 )];
pD[2 ] = base64char[0x3F & (pS[1 ] <<2 | pS[2 ]>> 6 )];
pD[3 ] = base64char[0x3F & pS[2 ];
}

//static const unsigned char BASE64_PADDING='=';
switch (pSEnd-pS)
{
case 1 :
pD[0 ]=base64char[pS[0 ]>> 2 ];
pD[1 ]=base64char[0x3F & (pS[0 ] <<4 )];
//pD[2] = BASE64_PADDING;
//pD[3] = BASE64_PADDING ;
break ;
case 2 :
pD[0 ]=base64char[pS[0 ]>> 2 ];
pD[1 ]=base64char[0x3F & (pS[0 ] <<4 | pS[1 ]>> 4 )];
pD[2 ]=base64char[0x3F & (pS[1 ] <<2 )];
//pD[3] = BASE64_PADDING ;
break ;
}
};
PyObject * uufilename(PyObject * args,PyObject *kwds){
    uuid_t uu;
    uuid_generate( uu );

    //用的改造过的base64的编码+改造的uuid

    static const unsigned data_size=16 ;
    static const int b64_length = (data_size+2 )/3 *4 -2 ;
 
    char b64uu[data_size];

    base64_encode(uu,data_size,b64uu);
    PyObject *value = PyString_FromStringAndSize(b64uu,b64_length);
    return value;
};
PyDoc_STRVAR(uufilename__doc__,
    "uufilename"
);
static PyMethodDef uuxx_methods[] = {
  {
    "uufilename" ,
    uufilename,
    METH_VARARGS,
    uufilename__doc__
},
{NULL, NULL, 0 , NULL}

};

PyMODINIT_FUNC inituuxx(){
  Py_InitModule("uuxx" , uuxx_methods);
}

用c写python的拓展模块

用c写python的拓展模块

使用C写Python的模块(转载)

使用C写Python的模块 概述引入 Python.h 头文件编写包装函数处理从 Python 传入的参数实现逻辑功能处理 C 中的返回值注册函数注册模块编译 ...

写python的扩展模块(C)

把C语言写的函数作为python的扩展模块。为python创建扩展需要三个步骤: 1. 创建程序代码(C) 2. 写包装代码 3. 编译(写setup.py进行build)下面先给出一个最...

使用C写Python的模块

使用C写python模块。。 引用自:http://zouyesheng.com/python-module-c.html 使用C写Python的模块 2012-12-2...
  • s_jobs
  • s_jobs
  • 2012年12月26日 17:12
  • 631

Python 扩展使用 C/C++ 给 Python 写扩展模块的方法

本文来自作者 gashero 在 GitChat 上分享「Python 的 C 扩展开发惯例」,「阅读原文」查看交流实录 「文末高能」 编辑 | 嘉仔 目录 1   简介    ...
  • GitChat
  • GitChat
  • 2017年11月15日 00:00
  • 552

使用c写python的模块和python调用系统dll

python总是和c连接最紧密,因为python本身就是用c写的。python用c进行扩展模块也很容易和高效。 使用c写python的模块,首先要引入Python.h头文件,并且一些数据类型和要是用...
  • sujudz
  • sujudz
  • 2013年03月29日 18:12
  • 728

Python 调用C模块以及性能分析

原文地址:http://www.cnblogs.com/Xjng/p/5120853.html 一.c,ctypes和python的数据类型的对应关系 ctypes typ...

Python与C/C++ 模块相互调用

Python与C/C++ 模块相互调用 开源中国推出 PaaS@OSC 代码演示和运行平台 Python调用C动态链接库 Python调用C库很简单,不经过任何封装打包成so,再使用pyt...

高效开发Python扩展模块方法:用SWIG封装C/C++代码

原文首发地址: http://www.atolin.net/298/ 1. SWIG介绍: http://sourceforge.net/projects/swig/ 2. 对于性能...
  • linsoon
  • linsoon
  • 2013年02月19日 17:30
  • 789

linux 下C调用Python 模块

最近做一个移植项目, 用到C调用Python, 在网上搜了好多资料,但是发现按照上面介绍的一步一步来, 根本行不通,最后还是根据系统报出的错误,进行调试才成功, 所以感觉很有必要做下记录。     ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用c的写python模块的演示
举报原因:
原因补充:

(最多只允许输入30个字)