Как упаковать и распаковать использование ctypes (Структура <-> ул.)

Статья от Питание Двух Игр Игры Из уже было упомянуто в другом ответе, но я предлагаю читать все (или почти все) там, поскольку они все действительно правильно написаны и применяются непосредственно к игровой разработке. статья об Утверждает , особенно хорошо. Можно также посетить их предыдущий веб-сайт в Игры Из , который много записал [приблизительно 113] Разработку через тестирование , который является поблочным тестированием, взятым до крайности.

Питание Двух парней - те, кто реализовал UnitCpp, вполне прилично расцененную платформу поблочного тестирования. Лично, я предпочитаю WinUnit.

41
задан Mr Temp 1 December 2009 в 11:57
поделиться

2 ответа

Вики PythonInfo предлагает решение этой проблемы.

FAQ: Как копировать байты в Python из ctypes.Structure?

 def send (self):
 буфер возврата (сам) [:]

FAQ: Как скопировать байты в ctypes.Structure из Python?

 def receiveSome (self, bytes):
 fit = min (длина (байты), ctypes.sizeof (себя))
 ctypes.memmove (ctypes.addressof (self), bytes, fit)

Их send является (более или менее) эквивалентом pack , а receiveSome является своего рода pack_into . Если у вас есть «безопасная» ситуация, когда вы распаковываете структуру того же типа, что и исходная, вы можете однострочно, например memmove (addressof (y), buffer (x) [:], sizeof (y)) , чтобы скопировать x в y . Конечно, у вас, вероятно, будет переменная в качестве второго аргумента, а не буквальная упаковка x .

30
ответ дан 27 November 2019 в 00:50
поделиться

Посмотрите на эту ссылку на бинарный i/o в питоне:

http://www.dabeaz.com/blog/2009/08/python-binary-io-handling.html

Исходя из этого вы можете просто написать следующее для чтения из буфера (а не только из файлов):

g = open("foo","rb")
q = Example()
g.readinto(q)

Записать просто:

g.write(q)

То же самое для использования сокетов:

s.send(q)

и

s.recv_info(q)

я провел некоторые тесты с pack/unpack и ctypes, и этот подход является самым быстрым, за исключением записи прямо на C

.
18
ответ дан 27 November 2019 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: