[英]structures with functions and python ctypes
我有一個ac庫我想用python 2.7 ctypes包裝。
typedef struct SRSLTE_API{
void *ptr;
uint32_t R;
uint32_t K;
uint32_t framebits;
bool tail_biting;
float gain_quant;
int16_t gain_quant_s;
int (*decode) (void*, uint8_t*, uint8_t*, uint32_t);
int (*decode_f) (void*, float*, uint8_t*, uint32_t);
void (*free) (void*);
uint8_t *tmp;
uint8_t *symbols_uc;
}srslte_viterbi_t;
如何在python中創建此結構? 這就是我現在擁有的。
from ctypes import *
class srslte_viterbi_t(Structure):
_fields_ = [("ptr", c_void_p),
("R", c_uint),
("K", c_uint),
("framebits", c_uint),
("tail_biting", c_bool),
("gain_quant", c_float),
("gain_quant_s", c_short),
("decode", POINTER(c_int)),
("decode_f", POINTER(c_int)),
("free", c_void_p),
("tmp", POINTER(c_ubyte)),
("symbols_uc", POINTER(c_ubyte))
]
viterbi_t = srslte_viterbi_t(None, c_uint(0), c_uint(0), c_uint(0),
c_bool(False), c_float(0.0), c_short(0), None, None, None, None, None)
此結構編譯但未給出正確的結果。 我擔心我沒有正確分配解碼功能? 什么是線
int (*decode) (void*, uint8_t*, uint8_t*, uint32_t);
無論如何做一個結構?
這是結構的正確定義:
from ctypes import *
class srslte_viterbi_t(Structure):
_fields_ = [
('ptr',c_void_p),
('R',c_uint32),
('K',c_uint32),
('framebits',c_uint32),
('tail_biting',c_bool),
('gain_quant',c_float),
('gain_quant_s',c_int16),
('decode',CFUNCTYPE(c_int,c_void_p,POINTER(c_uint8),POINTER(c_uint8),c_uint32)),
('decode_f',CFUNCTYPE(c_int,c_void_p,POINTER(c_float),POINTER(c_uint8),c_uint32)),
('free',CFUNCTYPE(None,c_void_p)),
('tmp',POINTER(c_uint8)),
('symbols_uc',POINTER(c_uint8))]
viterbi_t = srslte_viterbi_t()
實例化時,結構由ctypes
零初始化。
結構中的解碼行是函數指針。 CFUNCTYPE
用於定義函數指針返回類型和參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.