2011-09-26 5 views
1

두 번째 배열을 첫 번째 매개 변수로 받아들이는 함수가 있습니다.ctypes 이중 배열 인코딩 오류 (1.35689368162e-312 -> 0.047098)

cb_type = CFUNCTYPE(c_void_p, c_double * 2, c_int, c_int) 
def mycb(cube, ndim, nparams): 
    print "cube before", [v for v in cube] 
    for i in range(ndim): 
     cube[i] = cube[i] * 10 * math.pi 
    print "cube after", [v for v in cube] 

일반적인 cb_type (mycb)을 통해 C에 넘깁니다.

printf("values before: %f, %f\n", Cube[0], Cube[1]); 
cb(Cube, *ndim, *npars); 
printf("values after : %f, %f\n", Cube[0], Cube[1]); 

프로그램을 실행하면 몇 가지 패킹/언팩 또는 디코딩 문제가 발생합니다.

values before: 0.047098, 0.010474   | C 
cube before [4.3191267336e-314, 1e-323]  | Python, should be the same values 
cube after [1.35689368162e-312, 3.1e-322] | Python 
values after : 0.047098, 0.010474   | C 

인코딩 문제를 해결하려면 어떻게합니까 [0.047098, 0.010474] 파이썬 함수에서)?

답변

0

c_double * 2 대신에 POINTER (c_double)을 사용하여 수정했습니다.

새로운 출력은 다음과 같습니다

values before: 0.905349, 0.270400 
cube before [0.905348643442958, 0.2703996141057701] 
cube after [28.44236647177882, 8.494854412082024] 
values after : 28.442366, 8.494854