본문 바로가기
지속가능티끌/Python

Python. ctypes. structure. 구조체

by 리치굿맨 2019. 5. 16.

 

파이썬에서 구조체 

- 아래 코드예처럼 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

 


 

태그

, ,

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT