Gil.I
Gil.I

Reputation: 884

Define function in Python as it defined in C

I have function in C that reads byte by byte from a given buffer and returns the result of a mathematical formula.
I need to write the same function in Python

The buffer in C is struct and in python i used ctypes Structure class
my prototype in c is int calc_formula(char *buff,int len)
so calling the function in c is staright forward but how i define such function in Python?

I try to define the following and have some questions

def calc_formula(buff,len):
    some code
  1. In C I called the function with pointer to the strcut first char. How do I do it in Python? is buff passed as pointer? My buffer is very large and if it can't be done, I will use global variable (which is less preferred).
  2. I need to read the buffer byte by byte, so in c I simply increment the buffer pointer. What's the way to do it in python? I read about ctypes union class that I can define over the Structure and go over it byte by byte. Do you have a better solution?

UPDATE

i tried bbrame solution :

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

with When i try its code with calc_formula(input_buff,len) , i get the following:
"*error:TypeError: 't_input_buff' object is not iterable*" - input_buff is instance of t_input_buff that is Class(Structure) . what can be the problem? (it give me the error when it try to do the for command)

Upvotes: 0

Views: 461

Answers (2)

Gil.I
Gil.I

Reputation: 884

UPDATE i solve it with ctypes union class
for answer look in this question

Upvotes: 0

bbrame
bbrame

Reputation: 18544

In c, try using the type c_char_p rather than char* (see the ctypes documentation).

In python the parameter (buff) will be a python string. Loop through it as follows:

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

Upvotes: 1

Related Questions