【发布时间】:2015-06-24 06:08:03
【问题描述】:
我有一个包含以下 C 数组的文件:
/* 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 */
};
在 python 中有没有直接的方法来解析这个文件并提取十六进制流?我需要输出是这样的:
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
【问题讨论】:
-
通常你必须用 Python 写一个 C 解析器。确实有些困难。但如果文件像我们看到的那样简单,那么您可以简单地通过正则表达式搜索
{...};之间的所有内容。 -
@freakish 搜索
{...}块也是我的第一个想法。只是想看看python中是否有任何可以理解C数组的库。好像没有。 -
:%s,/.*/,:g/{/norm jvi}J:g/[{}]/d在 Vim 中。