c寫python庫 c寫python模組擴充套件

2021-10-12 11:30:53 字數 2737 閱讀 8792

**結構

xorcrypt-0.2

\setup.py

\xorcrypt2.c

\readme

setup.py

#!/usr/bin/python

from distutils.core import setup, extension

__version__ = "0.2"

macros = [('module_version', '"%s"' % __version__)]

setup(name         = "xorcrypt2",

version      = __version__,

author       = "fk",

author_email = "[email protected]",

url          = "",

download_url = "",

description  = "xor encrypt/decrypt for python",

long_description = open('readme').read(),

license      = "lgpl",

platforms    = ["platform independent"],

classifiers  = [

"development status :: 5 - production/stable",

"intended audience :: developers",

"operating system :: os independent",

"programming language :: python",

"topic :: software development :: libraries :: python modules"

ext_modules  = [

extension(name='xorcrypt2', sources=['xorcrypt2.c'], define_macros=macros)

xorcrypt2.c

#include 

#include 

static pyobject* xor_crypt(pyobject* self, pyobject* args)

char* s;

unsigned int key = 0;

unsigned int m1 = 0;

unsigned int ia1 = 0;

unsigned int ic1 = 0;

unsigned int size;

pyobject* v;

char *p;

unsigned int i = 0;

unsigned char c;

// 解析引數 s#表示字串和它的長度, |後的表示可選引數, i表示unsigned int

if(!pyarg_parsetuple(args, "s#|iiii", &s, &size, &key, &m1, &ia1, &ic1))

return null;

if(key == 0)

key = 1;

if(m1 == 0)

m1 = 1 <

if(ia1 == 0)

ia1 = 2 <

if(ic1 == 0)

ic1 = 3<

// v是python的空字串, 長度為size

v = pystring_fromstringandsize((char*)null, size);

if(v == null)

return null;

// p是把python的字串v轉換為c的字串, 對p進行操作也會影響v

p = pystring_as_string(v);

for (i = 0; i 

c = (unsigned char)s[i];

key = ia1 * (key % m1) + ic1;

*p = c ^ (unsigned char)((key >> 20)&0xff);

p++;

return v;

// 方法列表, 要傳到初始化函式裡

static pymethoddef xorcrypt2_methods = ,

// sentinel

pydoc_strvar(module_doc, "xor encrypt/decrypt module.");

/* 當初始化模組時, 這個函式自動被呼叫, 函式名要固定為  */

pymodinit_func initxorcrypt2(void)

pyobject *m;

m = py_initmodule3("xorcrypt2", xorcrypt2_methods, module_doc);

if (m == null)

return;

pymodule_addstringconstant(m, "__version__", "0.2");

安裝(編譯)

python setup.py install(build)

套著寫就行了

import xorcrypt2

print xorcrypt2.crypt("abc", 2)

# 'kde'

print xorcrypt2.crypt("kde", 2)

# 'abc'

測試發現這個c版本的速度是python版本的42倍! 很吃驚

python中呼叫C 寫的動態庫

一 環境 windows xp python3.2 1.dll對應的原始檔 m.cpp include extern c declspec dllexport void print sum unsigned long ulnum 2.python源程式 coding gbk from ctypes ...

使用C寫Python的模組

概述 引入 python.h 標頭檔案 編寫包裝函式 處理從 python 傳入的引數 實現邏輯功能 處理 c 中的返回值 註冊函式 註冊模組 編譯原文發於2010年11月。python 可以非常方便地和 c 進行相互的呼叫。一般,我們不會使用 c 去直接編寫乙個 python 的模組。通常的情景是...

如何用Python寫C擴充套件?

1.環境準備 如果是linux只需要安裝python3.x python dev。windows下稍微複雜點,vs2017 python3.6.3 vs2017可用社群版,需要選擇安裝的環境如下 2.1 c模組封裝 以計算兩個數相加為例,選擇任意資料夾,新建如下c語言原始碼 檔名 calc.c in...