Python调用C的方法

参考:http://www.cnblogs.com/fxjwind/archive/2011/07/05/2098636.html

         http://amazingjxq.com/2012/01/09/python%E8%B0%83%E7%94%A8c%E5%87%BD%E6%95%B0/

 

 >>>cd /home/jxq/code/

gcc -fPIC -shared bob_hash.c -o bob_hash.so

然后在python里面用ctypes加载刚才的动态库。argtypes和restype分别对应函数的参数和返回值的类型。这样就可以直接调用了。


>>> from ctypes import CDLL, c_int, c_void_p
>>> bob_hash = CDLL('/home/jxq/code/bob_hash.so')
>>> hash_string = bob_hash.hash_string
>>> hash_string.argtypes = [c_void_p]
>>> hash_string.restype = c_int
>>> hash_string('123')

 

 

代码:

#include <stdio.h>
#include <string.h>
#define mix(a,b,c)                              
    {                                          
        a -= b; a -= c; a ^= (c >> 13);        
        b -= c; b -= a; b ^= (a << 8);          
        c -= a; c -= b; c ^= (b >> 13);        
        a -= b; a -= c; a ^= (c >> 12);        
        b -= c; b -= a; b ^= (a << 16);        
        c -= a; c -= b; c ^= (b >> 5);          
        a -= b; a -= c; a ^= (c >> 3);          
        b -= c; b -= a; b ^= (a << 10);        
        c -= a; c -= b; c ^= (b >> 15);        
    }

unsigned int bob_hash(void *val, unsigned int length)
{
    char *k = (char *)val;
    unsigned long a,b,c,len;

    /* Set up the internal state */
    len = length;
    a = b = c = 0x9e3779b9;  /* the golden ratio; an arbitrary value */

    /* Handle most of the key */
    while (len >= 12)
    {
        a += (k[0] +((unsigned long)k[1] << 8) +((unsigned long)k[2] << 16) +((unsigned long)k[3] << 24));
        b += (k[4] +((unsigned long)k[5] << 8) +((unsigned long)k[6] << 16) +((unsigned long)k[7] << 24));
        c += (k[8] +((unsigned long)k[9] << 8) +((unsigned long)k[10]<< 16)+((unsigned long)k[11] << 24));
        mix(a,b,c);
        k += 12; len -= 12;
    }

    /* Handle the last 11 bytes */
    c += length;
    switch(len)              /* all the case statements fall through */
    {
    case 11: c+=((unsigned long)k[10] << 24);
    case 10: c+=((unsigned long)k[9]  << 16);
    case 9 : c+=((unsigned long)k[8]  << 8);
        /* the first byte of c is reserved for the length */
    case 8 : b+=((unsigned long)k[7] << 24);
    case 7 : b+=((unsigned long)k[6] << 16);
    case 6 : b+=((unsigned long)k[5] << 8);
    case 5 : b+=k[4];
    case 4 : a+=((unsigned long)k[3] << 24);
    case 3 : a+=((unsigned long)k[2] << 16);
    case 2 : a+=((unsigned long)k[1] << 8);
    case 1 : a+=k[0];
    }
    mix(a,b,c);

    return c;
}

int hash_string(void *tmpstr)
{
    int hash = (int)bob_hash(tmpstr, strlen(tmpstr));
    if(hash < 0)
    {
        hash = -hash;
    }
    return (int)(hash % 200);
}

转载于:https://www.cnblogs.com/li-baibo/p/3178548.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01.神经网络和深度学习 W2.神经网络基础

文章目录1. 二分类2. 逻辑回归3. 逻辑回归损失函数4. 梯度下降5. 导数6. 计算图导数计算7. 逻辑回归中的梯度下降8. m个样本的梯度下降9. 向量化10. 向量化的更多例子11. 向量化 logistic 回归12. 向量化 logistic 回归梯度输出13. numpy 广播机制14. 关于 python / numpy 向量…

python中的孤儿进程

1.子进程未运行完父进程就结束运行退出&#xff0c;留下来的子进程就是孤儿进程 2.父进程结束退出&#xff0c;子进程会被继父收回&#xff0c;通常是int进程&#xff08;pid为1&#xff09;无危害 import os import time ret os.fork() # 创建新的进程 一次调用&#xff0…

Oracle数据库物理存储结构管理遇到的问题与解决

问题一&#xff1a;当我创建一个重做日志文件放入重做日志文件组中的时候&#xff0c;查询数据字典发现新创建的重做日志文件的状态为“不合法”。 解决方案&#xff1a; 通过查阅相关资料了解到 新建的重做日志文件组成员状态为INVALID,这是由于新建的成员文件还没有被…

实例讲解hadoop中的map/reduce查询(python语言实现)

条件&#xff0c;假设你已经装好了hadoop集群&#xff0c;配好了hdfs并可以正常运行。 $hadoop dfs -ls /data/dw/explorerFound 1 itemsdrwxrwxrwx - rsync supergroup 0 2011-11-30 01:06 /data/dw/explorer/20111129$ hadoop dfs -ls /data/dw/explo…

python中僵尸进程

⼦进程运⾏完成&#xff0c;但是⽗进程迟迟没有进⾏回收&#xff0c;此时⼦进程实际上并没有退出&#xff0c;其仍然占⽤着系统资源&#xff0c;这样的⼦进程称为僵⼫进程。 因为僵⼫进程的资源⼀直未被回收&#xff0c;造成了系统资源的浪费&#xff0c;过多的僵⼫进程将造成…

01.神经网络和深度学习 W3.浅层神经网络

文章目录1. 神经网络概览2. 神经网络的表示3. 神经网络的输出4. 多样本向量化5. 激活函数6. 为什么需要 非线性激活函数7. 激活函数的导数8. 随机初始化作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 神经网络概览 xW[1]b[1]}⟹z[1]W[1]xb[1]⟹a[1]σ(z[1])\left.\begin…

多进程修改全局变量

多进程中&#xff0c;每个进程中所有数据&#xff08;包括全局变量&#xff09;都各有拥有⼀份&#xff0c;互不影响 (读时共享&#xff0c;写时复制) import os import time num 100 ret os.fork() # 创建新的进程 一次调用&#xff0c;两次返回 if ret 0: # 子进程…

多进程模块multiprocessing

multiprocessing模块就是跨平台版本的多进程模块&#xff0c;提供了⼀个Process类来代表一个进程对象 创建⼦进程时&#xff0c;只需要传⼊⼀个执⾏函数和函数的参数&#xff0c;创建⼀个 Process实例&#xff0c;⽤start&#xff08;&#xff09;方法启动 &#xff0c;join()…

01.神经网络和深度学习 W2.神经网络基础(作业:逻辑回归 图片识别)

文章目录编程题 11. numpy 基本函数1.1 编写 sigmoid 函数1.2 编写 sigmoid 函数的导数1.3 reshape操作1.4 标准化1.5 广播机制2. 向量化2.1 L1\L2损失函数编程题 2. 图片&#x1f431;识别1. 导入包2. 数据预览3. 算法的一般结构4. 建立算法4.1 辅助函数4.2 初始化参数4.3 前向…

PL/SQL程序设计以及安全管理实验遇到的问题及解决

问题一&#xff1a;当我书写PL/SQL语句调用所创建的函数时&#xff0c;报“此范围不存在名为XXX函数名”的错误。 解决&#xff1a; 我通过查阅相关资料&#xff0c;了解到&#xff1a;这种情况主要是调用的函数的参数或者函数名书写错误&#xff0c; 然而&#xff0c;我经过仔…

PowerDesigner使用教程 —— 概念数据模型 (转)

一、概念数据模型概述 概念数据模型也称信息模型&#xff0c;它以实体&#xff0d;联系(Entity-RelationShip,简称E-R)理论为基础&#xff0c;并对这一理论进行了扩充。它从用户的观点出发对信息进行建模&#xff0c;主要用于数据库的概念级设计。 通常人们先将现实世界抽…

进程的创建-Process⼦类

from multiprocessing import Process&#xff08;P必须大写 import os import time classSubProcess(Process): """创建Process的子类""" def __init__(self, num, a): super(SubProcess, self).__init__() # 执行父类Process默认的初始化方法…

阿里云 超级码力在线编程大赛初赛 第1场(第245名)

文章目录1. 比赛结果2. 题目1. 树木规划2. 正三角形拼接3. 大楼间穿梭4. 对称前后缀1. 比赛结果 通过了 3 题&#xff0c;第245名&#xff0c;进入复赛了&#xff0c;收获 T恤 一件&#xff0c;哈哈。 2. 题目 1. 树木规划 题目链接 描述 在一条直的马路上&#xff0c;…

python中的进程池Pool

初始化Pool时&#xff0c;可以指定⼀个最大进程池&#xff0c;当有新进程提交时&#xff0c;如果池还没有满&#xff0c;那么就会创建新进程请求&#xff1b;但如果池中达到最大值&#xff0c;那么就会等待&#xff0c;待池中有进程结束&#xff0c;新进程来执行。 非阻塞式&a…

AS3.0面向对象的写法,类和实例

package /*package是包路径&#xff0c;例如AS文件在ActionScript文件夹下&#xff0c;此时路径应为package ActionScript。必须有的。package中只能有一个class&#xff0c;在一个AS文件中可以有若干个package*/ {public class hello /*类的名字*/{public var helloString:Str…

小小算法题(CCF)

题目 淘金 题目描述 在一片n*m的土地上&#xff0c;每一块1*1的区域里都有一定数量的金子。这一天&#xff0c;你到这里来淘金&#xff0c;然而当地人告诉你&#xff0c;如果你要挖(x, y)区域的金子&#xff0c;就不能挖(x-1&#xff0c;y),(x1, y)以及横坐标为y-1和y1的金…

01.神经网络和深度学习 W3.浅层神经网络(作业:带一个隐藏层的神经网络)

文章目录1. 导入包2. 预览数据3. 逻辑回归4. 神经网络4.1 定义神经网络结构4.2 初始化模型参数4.3 循环4.3.1 前向传播4.3.2 计算损失4.3.3 后向传播4.3.4 梯度下降4.4 组建Model4.5 预测4.6 调节隐藏层单元个数4.7 更改激活函数4.8 更改学习率4.9 其他数据集下的表现选择题测试…

python中的异步与同步

异步&#xff1a; 多任务&#xff0c; 多个任务之间执行没有先后顺序&#xff0c;可以同时运行&#xff0c;执行的先后顺序不会有什么影响&#xff0c;存在的多条运行主线 同步&#xff1a; 多任务&#xff0c; 多个任务之间执行的时候要求有先后顺序&#xff0c;必须一个先执行…

C语言指针祥讲

前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根…