我想创建一个C++库(.so),并在Python中使用它。 但是正如你所看到的,C++函数参数是固定大小数组。 如下图所示创建python源代码时, lib.ShiftRows.argypes=类型.c\u void\u p?] 我应该在“”中输入什么类型的数据部门?你知道吗
当实际使用上述类时,Python如何声明一个数组以声明与c++相同的数组变量?你知道吗
你知道吗AES.cpp公司地址:
void AESS::ShiftRows( char state[0x04][0x04]) {
int i, j, k, tmp;
for (i = 0; i<4; i++) {
for (j = 4 - i; j<4; j++) {
tmp = state[i][0];
for (k = 0; k<4 - 1; k++) {
state[i][k] = state[i][k + 1];
}
state[i][3] = tmp;
}
}
}
extern "C"
{
AESS* AESS_new(){return new AESS();}
void ShiftRows(AESS* aes, char state[0x04][0x04]) {aes->ShiftRows(state);}
}
你知道吗AESClass.py类地址:
import ctypes
lib = ctypes.cdll.LoadLibrary('./libAESS.so')
class AESS():
def __init__(self):
lib.AESS_new.argtypes = []
lib.AESS_new.restype = ctypes.c_void_p
lib.ShiftRows.argtypes=[ctypes.c_void_p , ?]
lib.ShiftRows.restype= ctypes.c_void_p
self.obj=lib.AESS_new()
def ShiftRows(self, state):
lib.ShiftRows(self.obj, state)
你知道吗AES.py公司地址:
import numpy as np
from AESClass import AESS
state = np.zeros((4,4))
aes = AESS()
aes.ShiftRows(state)
签出[Python 3.Docs]: ctypes - A foreign function library for Python(数组部分)。你知道吗
你可以这样做:
AESClass.py类:
AES.py公司(使用[SciPy]: numpy.ctypeslib.as_array(obj, shape=None)):
或者反过来说:
相关问题 更多 >
编程相关推荐