2015-06-24 40 views
-1

我有包含下面的C数组文件:如何解析数组c在python

/* Frame bytes */ 
static const unsigned char pkt1[19] = { 
0x83, 0x01, 0xbc, 0x4e, 0xd9, 0x09, 0x81, 0x03, /* ...N.... */ 
0x79, 0x54, 0x55, 0x98, 0x69, 0x06, 0x0a, 0x12, /* yTU.i... */ 
0x42, 0x83, 0x62        /* B.b */ 
}; 

/* Frame bytes */ 
static const unsigned char pkt2[11] = { 
0x83, 0x01, 0xbc, 0x4e, 0x39, 0x09, 0x81, 0x03, /* ...N9... */ 
0x52, 0x80, 0x30        /* R.0 */ 
}; 

/* Frame (115 bytes) */ 
static const unsigned char pkt3[27] = { 
0x83, 0x01, 0xbc, 0x4e, 0x39, 0x09, 0x81, 0x03, /* ...N9... */ 
0x01, 0x00, 0x6c, 0x1f, 0xa2, 0x1d, 0x02, 0x01, /* ..l..... */ 
0x04, 0x08, 0x34, 0x12, 0x21, 0x00, 0x35, 0x63, /* ..4.!.5c */ 
0x92, 0x91, 0x65        /* ..e */ 
}; 

是否有蟒蛇任何直接的方式来解析该文件并解压六角流?我需要的输出是这样的:

0x83, 0x01, 0xbc, 0x4e, 0xd9, 0x09, 0x81, 0x03, 0x79, 0x54, 0x55, 0x98, 0x69, 0x06, 0x0a, 0x12, 0x42, 0x83, 0x62 

0x83, 0x01, 0xbc, 0x4e, 0x39, 0x09, 0x81, 0x03, 0x52, 0x80, 0x30 

0x83, 0x01, 0xbc, 0x4e, 0x39, 0x09, 0x81, 0x03, 0x01, 0x00, 0x6c, 0x1f, 0xa2, 0x1d, 0x02, 0x01, 0x04, 0x08, 0x34, 0x12, 0x21, 0x00, 0x35, 0x63, 0x92, 0x91, 0x65 

或者:

8301bc4ed90981037954559869060a12428362 
8301bc4e39098103528030 
8301bc4e3909810301006c1fa21d02010408341221003563929165 
+1

一般来说,你将不得不用Python语言编写一个C解析器。真的很难。但是,如果文件非常简单,那么您可以通过正则表达式搜索“{...};”之间的所有内容。 – freakish

+0

@freakish寻找'{...}'块是我的第一个想法。只是想看看是否有任何可以理解C数组的Python中的lib。似乎没有。 – Meysam

+0

':%s,/。* /,'':g/{/ norm jvi} J'':g/[{}]/d'在Vim中。 – TessellatingHeckler

回答

3

如何只:

[re.sub("/\*.+\*/", "", m).replace('\n', '').strip() for m in re.findall("{(.+?)};", c_file_as_string, re.S)]