질문 'ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: 라즈베리파이에서 오류
조회수 477회
C++ library(.so)를 만들어 파이썬에서 사용하고 싶습니다.
그러나 보시다시피 C++ 함수 ShiftRows
의 함수 인수는 고정된 크기의 배열입니다.
아래 소스와 같이 파이썬 소스를 생성할 때,
lib.ShiftRows.argypes=[type.c_void_p, ?]
"?" 섹션에 어떤 유형의 데이터를 넣어야 합니까?
그리고 실제로 아래의 AESClass.py의 AESS
클래스를 사용할 때 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 AES import AESS
state=np.zeros((4,4))`
AES=AESS()
AES.ShiftRows(state)
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력