2010-04-11 2 views
3

Эй, я действительно борюсь с этим. I'am пытается портировать небольшой кусочек чужого кода на Python, и это то, что у меня есть:Профайл порта C (& struct, ....) до Python

typedef struct 
{ 
    uint8_t Y[LUMA_HEIGHT][LUMA_WIDTH]; 
    uint8_t Cb[CHROMA_HEIGHT][CHROMA_WIDTH]; 
    uint8_t Cr[CHROMA_HEIGHT][CHROMA_WIDTH]; 
} __attribute__((__packed__)) frame_t; 

frame_t frame; 

while (! feof(stdin)) 
    { 
    fread(&frame, 1, sizeof(frame), stdin); 

    // DO SOME STUFF 
    } 

Позже мне нужно получить доступ к данным, как так: frame.Y [х] [у]

Итак, я создал «фрейм» класса на Python и вставил соответствующие переменные (frame.Y, frame.Cb, frame.Cr). Я попытался последовательно отобразить данные из Y [0] [0] в Cr [MAX] [MAX], даже распечатал C-структуру в действии, но мне не удалось обернуть голову вокруг метода, используемого для установки данные там. Я изо всех сил боролся с этим и сегодня должен вернуться в армию, поэтому любая немедленная помощь очень приветствуется и ценится.

Благодаря

+5

@ user287669: Правильный способ отметить вопрос «разрешен» в stackoverflow - это принять ответ с значком галочки рядом с ним. Это также заставит вас выглядеть как фальшивый фторид, когда вы зададите будущие вопросы. – msw

ответ

6

Вы должны использовать стандартный модуль struct питона.
Из его документации (emphasys добавлено):

Этот модуль выполняет преобразование между значениями Python и C, представленных структурами в виде строк Python. Он использует строки формата (см. Ниже) как . Компактные описания планировки структур C и предполагаемого преобразования в значения Python. Этот может использоваться при обработке двоичных данных , хранящихся в файлах или из сети соединений, среди прочих источников.

Примечание: поскольку данные, которые вы читаете в конце концов единого формата, вы можете также использовать array модуль, а затем «реструктурировать» данные в Python, но я думаю, что лучший способ пойти по используя struct.

+0

Спасибо, я почти получил эту работу, когда я заметил кажущуюся бессмысленную ошибку, которая исказила весь мой вывод. Мое решение теперь такое же, как я сказал ранее, - последовательно записывая из Y [0] [0] в Cr [MAX] [MAX]. Спасибо за помощь. – kuratkull

Смежные вопросы