2011-11-30 111 views
0

我在函數C中從給定的緩衝區中逐字節讀取並返回數學公式的結果。
我需要編寫同樣的功能在Python在Python中定義函數,如C

C語言中的緩衝區結構和蟒蛇,我用ctypes的結構類
我的原型在c爲int calc_formula(char *buff,int len)
所以調用C中的功能staright forward,但我如何在Python中定義這樣的功能?

我嘗試定義如下,並有一些問題

def calc_formula(buff,len): 
    some code 
  1. 在C I調用指針功能的strcut第一個字符。我如何在Python中做到這一點?是buff作爲指針傳遞?我的緩衝區非常大,如果不能完成,我將使用全局變量(這是不太優選的)。
  2. 我需要逐字節地讀取緩衝區,所以在c中我只需遞增緩衝區指針。在Python中做什麼的方法是什麼?我讀了ctypes聯盟類,我可以通過結構定義並逐字節地遍歷它。你有更好的解決方案嗎?

UPDATE

我試圖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的實例。可能是什麼問題? (當它嘗試執行for命令時,它給了我錯誤)

+0

'ctypes'用於從Python中調用C函數。但是你也談論了在Python中重寫C函數。你需要做哪些? – interjay

+0

只是想檢查一下:你知道[NumPy和SciPy](http://numpy.scipy.org/)是python的高性能數字擴展嗎?我問,因爲從它的外觀看來,使用['numpy.ndarray'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html)將允許一個簡單的解決方案...再次:我不是說你做錯了...只是檢查你是否知道這種其他的可能性! :) – mac

+2

這就是爲什麼你翻譯*算法*,**沒有代碼**。 –

回答

0

UPDATEctypes的工會類
解決這個問題的回答看在this question

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

你的意思是「在c中,嘗試使用類型c_char_p而不是char * ctypes c_char_p是ctypes類型不是C類型(這就是爲什麼我使用char *) –

+0

,當我嘗試用calc_formula(input_buff,len)代碼時,出現以下錯誤:TypeError:'t_input_buff'object is not iterable「i ' - input_buff是Class(Structure)的t_input_buff的實例,可能是什麼問題? –