파이썬에서 구조체
- 아래 코드예처럼 ctypes.Structure 형식으로 class 생성하면서 구조체 멤버는 _filelds_ 부분에서 정의한다.
from ctypes import *
class ST_DATA(Structure):
_fields_ = [("v1", c_int),
("v2", c_double),
("v_arr",c_double * 50 )]
stmyData = ST_DATA(1,0.0) #구조체변수 stmyData 정의.
print(stmyData.v1, stmyData.v2)
_fields_ : 필드이름과 필드형을 포함하는 2튜플의 리스트.
필드형 : c_int와 같은 ctypes 형, 혹은 파생된 ctypes 형(구조체, 공용체, 배열, 포인터) 만 가능.
필드형으로 불가능한 예 : Enum
위 구조체 정의와 동일한 C 에서의 구조체 코드는 아래와 같다.
typedef struct
{
int v1;
double v2;
double v_arr[50];
}ST_DATA;
ST_DATA stmyData; // 구조체 변수 stmyData 정의.
구조체 멤버로 다른 구조체 배열을 갖는예.
class CyST_CANDLE_forMULTI(Structure):
_fields_ = [("Open", c_double),("High", c_double),("Low", c_double),("Close", c_double), # OHLC for one candle.
("MA", c_double * 10), # MA5, MA20, MA40, MA80, MA160
("PriceExt", c_double * 10), # ex. Kalman Filtered.
("ValueExt", c_double * 10) # ex. ATR etc.
]
class CyST_DATACANDLE_SYMBOLMULTI(Structure): # the struct for the function cyfinfoca.Get_DataCandle
_fields_ = [("i_timeframe", c_int),
("Num_Symbols", c_int),
("iarr_symbols",c_int * 10),
("starr_Candle",CyST_CANDLE_forMULTI * 10) # 사이즈 10 구조체 배열.
]
구조체 allignment 적용방법. pack
- 아래 코드예처럼 _pack_ = 1 , 4 등을 기록한다.
class ST_DATA(Structure):
_pack_ = 1
_fields_ = [("v1", c_int),
("v2", c_double),
("v_arr",c_double * 50 )]
첫등록 : 2019년 5월 16일
최종수정 :
본 글 단축주소 : https://igotit.tistory.com/2147
'지속가능티끌 > Python' 카테고리의 다른 글
Python. time . sleep . datetime. 밀리초 등 (0) | 2019.05.22 |
---|---|
Pyhton. print. 실수 자리수 제한등 (0) | 2019.05.19 |
Python. if . 비교연산자, and, or not, in, not in , (0) | 2019.05.16 |
Python. enum (0) | 2019.05.16 |
Python. ctypes. CFUNCTYPE. WINFUNCTYPE.콜백함수 (0) | 2019.05.16 |
댓글