端口C对Python的fread(& struct,....)

时间:2010-04-11 10:16:00

标签: python c struct porting

嘿,我真的很挣这个。我试图将一小部分别人的代码移植到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 [x] [y]

所以我在Python中创建了一个Class'frame'并插入了相应的变量(frame.Y,frame.Cb,frame.Cr)。 我试图按顺序将数据从Y [0] [0]映射到Cr [MAX] [MAX],甚至打印出C结构中的操作但是没有设法绕过用于放置数据的方法在那里。我一夜之间一直在苦苦挣扎,今晚必须回到军队,所以任何直接的帮助都是非常受欢迎和赞赏的。

由于

1 个答案:

答案 0 :(得分:6)

你必须使用struct python标准模块 从其文档(强调补充):

  

此模块执行转换   Python值和C结构之间   表示为Python字符串。它用   格式化字符串(如下所述)为   紧凑的布局描述   C结构和意图   转换为Python值/从Python值转换。 :此   可用于处理二进制数据   存储在文件或网络中   连接,以及其他来源

注意:由于您最终阅读的数据是统一格式,您也可以使用array模块,然后在Python中“重组”数据,但我认为最好的方法是通过使用struct。