2010-08-18 5 views
2

У меня есть строковый буфер: b = create_string_buffer(numb) где numb - это количество байтов.Смещение типов в буфере

В моей обертке мне нужно соединить этот буфер. При вызове функции, ожидающей POINTER(c_char) я могу сделать: myfunction(self, byref(b, offset)), но в структуре:

class mystruct(Structure): 
    _fields_ = [("buf", POINTER(c_char))] 

Я не в состоянии сделать это, получаю исключение типа аргумента. Поэтому мой вопрос: как я могу присвоить .buf смещение в b. Прямое назначение работает так .buf = b, однако это непригодно. (Python не выдерживает хорошо против ~ 32000 таких буферов создается каждую секунду, следовательно, мое желание использовать единый сращивания буфер.)

ответ

2

ctypes.cast

>>> import ctypes 
>>> b = ctypes.create_string_buffer(500) 
>>> b[:6] = 'foobar' 
>>> ctypes.cast(ctypes.byref(b, 4), ctypes.POINTER(ctypes.c_char)) 
<ctypes.LP_c_char object at 0x100756e60> 
>>> _.contents 
c_char('a') 
Смежные вопросы