Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Си-шные массивы в struct


Автор: turist 21.8.2007, 12:12
(crosspost в python.com.ua)

Привет народ!

Помогите инвалиду Google-а, не смог найти ответ на свой вопрос.

Итак, есть структура пакета из Сишного .h:

struct pktHeader
{
  uint8_t  version;
  uint8_t  flag;
  uint8_t Reserved[2];
  uint16_t  type;
  uint16_t  length;
  uint32_t  totalLength;
};


Я составляю строку формата для struct - "BB2BHHI". Но я так понимаю, что 2B - это не то, что мне нужно для uint8_t Reserved[2] - массива из двух элементов. Но ладно, я добрый, в этот раз могу и принять 2 значения, а потом их склеить. А когда их будет [100]?

Что можете посоветовать?

Заранее спасибо ;)

Автор: Void 21.8.2007, 12:45
Цитата(turist @  21.8.2007,  14:12 Найти цитируемый пост)
А когда их будет [100]?

Структуры данных не на пустом месте возникают. Массив из ста элементов — что это? Скорее всего строка. Значит можно использовать форматную строку '100s', которая вернёт все элементы одной строкой. А, скажем, для массива из сотни int, можно полученную строку ('400s') разбить с помощью array.
Наконец, даже вытащить из середины кортежа сто элементов ('100b') и сделать с ними всё что угодно — не проблема в Питоне. ''.join(map(chr, tuple[N:N + 100])), к примеру.

Автор: turist 21.8.2007, 13:57
Цитата(Void @ 21.8.2007,  12:45)
А, скажем, для массива из сотни int, можно полученную строку ('400s') разбить с помощью array.
Наконец, даже вытащить из середины кортежа сто элементов ('100b') и сделать с ними всё что угодно — не проблема в Питоне. ''.join(map(chr, tuple[N:N + 100])), к примеру.

Спасибо за ответ. Это и я собираюсь делать, но я всегда перед тем, чтобы что-то делаю, смотрю, нет ли штатных средств, чтобы велосипед не изобретать. К тому же логичней было бы, чтобы посреди распарсенной структуры были не просто 100 елементов, а какой-нить один tuple, но из ста элементов, чтобы с ним работать проще. Перерыл struct, нету... Эх... Кстати, ща смотрю в сторону ctypes и ctypes.Structure - по-моему, что-от похожее на то, что мне нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)