Форум сайта python.su
0
Всем здравствуйте!
Возникла такая задачка,с ctypes вообще не работал:
1) Как описать TLV на ctypes?
Сам TLV имеет следующий формат:
Идентификатор (2 байта)+Длина данных (2 байта)+Данные (Переменная длина)
class Tlv(Structure): _fields = [("tag",c_ushort), ("len",c_ushort), ("data",POINTER(c_ubytes)) ]
Отредактировано nsj32734 (Июнь 3, 2015 09:05:01)
Офлайн
53
nsj32734
может struct
Офлайн
0
А если без struct,но с ctypes?
Офлайн
88
Структуру Вы определили неправильно.
Разберите код по https://pyglet.googlecode.com/hg/pyglet/image/codecs/bmp.py - там есть всё что нужно. Обратите внимание на работу с массивами данных типов RGB* и функцию to_ctypes.
Офлайн
0
Shaman
Структуру Вы определили неправильно.Разберите код по https://pyglet.googlecode.com/hg/pyglet/image/codecs/bmp.py - там есть всё что нужно. Обратите внимание на работу с массивами данных типов RGB* и функцию to_ctypes.
Отредактировано nsj32734 (Июнь 3, 2015 14:30:39)
Офлайн
253
В вашей постановке задачи ctypes вообще не нужен. Такие данные обычно ползут из потока сокета файла и т.п. Поэтому и нужна длина элемента. Служебная информация при этом обычно отбрасывается.
Тема избитая но позволю себе предложить велосипед:
class Header(Structure): _fields_ = [ ('ident',c_short), ('L',c_short)] def loader(stream): h=Header() while 1: h.readinto(stream) data=stream.read(h.L) yield (h.ident,data)
Офлайн