如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
How to fix 'ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: wrong type' error in RaspberryPi
我想创建一个C++库(.so(并在Python中使用它。 但如您所见,C++函数参数是固定大小的数组。 创建如下所示的 python 源代码时, 自由。ShiftRows.argypes=types.c_void_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 - 一个用于 Python 的外部函数库(数组部分(。
您可以执行以下操作:
-
AESClass.py:
CharArr4 = ctypes.c_char * 4 CharArr4Arr4 = CharArr4 * 4 class AESS(): # ... lib.ShiftRows.argtypes = [ctypes.c_void_p , CharArr4Arr4]
-
AES.py(使用[SciPy]:numpy.ctypeslib。as_array(obj, shape=none((:
import numpy as np from AESClass import AESS, CharArr4Arr4 state_arr = CharArr4Arr4() # Initialize the 4 X 4 array to 0 aes = AESS() aes.ShiftRows(state_arr) state = np.ctypeslib.as_array(state_arr)
或者相反:
# ... state = np.zeros((4, 4), dtype=np.int8) # ... aes.ShiftRows(np.ctypeslib.as_ctypes(state))
相关文章:
- 我的模板类方法返回错误类型?
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- Eclipse/CDT_C++给出"语义错误_"类型XXX无法解决"。项目运行
- turbo 为什么我的C++代码中出现错误类型名称预期"错误?
- "auto"推断出 hashtable_policy.h 中的错误类型
- 设计自己的结果/两者之一:是否应该始终指定成功类型和错误类型
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 在 vscode 上编译错误.类型说明符是 C++11 扩展
- 不允许使用错误类型
- 当读取错误类型时,CIN覆盖我的初始化值
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 为什么缩小转换范围不能防止错误类型的map.insert()失败
- 程序总是返回二进制'>>':找不到运算符,它采用错误类型的左操作数
- 错误:类型为 '.&' 来自类型的临时 '..*康斯特'
- 涉及将要馈送的向量转换为execvp的错误类型
- C++中是否存在错误类型