**結構
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...