Как построить строку Python из необработанного (двоичного) буфера ctype? - PullRequest
2 голосов
/ 19 февраля 2011

Я играю с Python и ctypes и не могу понять, как решить эту проблему. Я вызываю функцию C, которая заполняет необработанные двоичные данные. Мой код выглядит так:

class Client():
  def __init__(self):
    self.__BUFSIZE = 1024*1024
    self.__buf = ctypes.create_string_buffer(self.__BUFSIZE)
    self.client = ctypes.cdll.LoadLibrary(r"I:\bin\client.dll")


  def do_something(self):
    len_written = self.client.fill_raw_buffer(self.__buf, self.__BUFSIZE)
    my_string = repr(self.__buf.value)
    print my_string

Проблема в том, что я получаю двоичные данные (с 0x00), и они усекаются, когда я пытаюсь собрать my_string. Как я могу построить my_string, если self._buf содержит нулевые байты 0x00?

Любая идея приветствуется. Спасибо

1 Ответ

8 голосов
/ 19 февраля 2011

Вы можете получить доступ к буферу, возвращенному create_string_buffer() в виде строки Python, используя его атрибут raw:

a = ctypes.create_string_buffer(10)
a.raw 
# '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Чтобы получить доступ только к первым n байтам, используйте

a.raw[:n]
...