我在函數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
- 在C I調用指針功能的strcut第一個字符。我如何在Python中做到這一點?是buff作爲指針傳遞?我的緩衝區非常大,如果不能完成,我將使用全局變量(這是不太優選的)。
- 我需要逐字節地讀取緩衝區,所以在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命令時,它給了我錯誤)
'ctypes'用於從Python中調用C函數。但是你也談論了在Python中重寫C函數。你需要做哪些? – interjay
只是想檢查一下:你知道[NumPy和SciPy](http://numpy.scipy.org/)是python的高性能數字擴展嗎?我問,因爲從它的外觀看來,使用['numpy.ndarray'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html)將允許一個簡單的解決方案...再次:我不是說你做錯了...只是檢查你是否知道這種其他的可能性! :) – mac
這就是爲什麼你翻譯*算法*,**沒有代碼**。 –