Смещение типов в буфер - PullRequest
2 голосов
/ 19 августа 2010

У меня есть строковый буфер: 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 плохо справляется с ~ 32 000 таких буферов, создаваемых каждую секунду, поэтому я хочу использовать один буфер сращивания.)

1 Ответ

2 голосов
/ 19 августа 2010

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')
...