在C中定义Python中定义的函数

时间:2011-11-30 14:17:09

标签: python ctypes

我在C中有一个函数,它从给定的缓冲区中逐字节读取并返回数学公式的结果 我需要在Python中编写相同的函数

C中的缓冲区是 struct ,在python中我使用 ctypes结构类
我在c中的原型是int calc_formula(char *buff,int len)
所以在c中调用函数是明星前进,但我如何在Python中定义这样的函数?

我尝试定义以下内容并提出一些问题

def calc_formula(buff,len):
    some code
  1. 在C中,我使用指针将函数调用到strcut第一个char。我怎么用Python做的?是 buff 作为指针传递?我的缓冲区非常大,如果不能完成,我将使用全局变量(不太喜欢)。
  2. 我需要逐字节读取缓冲区,所以在c中我只是递增缓冲区指针。在python中做到这一点的方法是什么?我读到了 ctypes union class ,我可以在 Structure 上定义并逐字节地遍历它。你有更好的解决方案吗?
  3. 更新

    我尝试了 bbrame 解决方案:

    def calc_formula(buff, len):
        sum = 0     
        for curChar in buff: 
            numericByteValue = ord(curChar) 
            sum += numericByteValue     
        return sum 
    

    当我用calc_formula(input_buff,len)尝试其代码时,我得到以下内容:
     " *错误:TypeError:' t_input_buff'对象不可迭代*" - input_buff是t_input_buff的实例,它是Class(Structure)。可能是什么问题? (它在尝试执行for命令时给出错误)

2 个答案:

答案 0 :(得分:1)

在c中,尝试使用类型c_char_p而不是char *(see the ctypes documentation)。

在python中,参数(buff)将是一个python字符串。按如下方式循环:

def calc_formula(buff, len):
    sum = 0
    for curChar in buff:
        numericByteValue = ord(curChar)
        sum += numericByteValue
    return sum

答案 1 :(得分:0)

<强>更新 我用 ctypes union class 解决它 在this question

中查看答案