二进制流解析C的库

时间:2013-05-21 04:20:27

标签: c parsing

您能否为C提供经过验证的二进制流解析库?如果它像C允许那样具有声明性,那就太好了。

我需要它用于二进制协议解析并通过它的正式规范描述相当复杂的协议,这就是为什么我希望它尽可能多的声明。就像是 Haskell的Data.Binary.Get会很棒。

我找到了binpac,但它看起来很重量级并且面向C ++,但该项目是纯粹的C.

描述我的意思的例子:

parser_t parsers[] = {
  { get_bit,      out_field1, &pkt.field1 }
 ,{ get_bit7,     0,           0          } // skip 7 bits
 ,{ get_word16be, out_field2, &pkt.field2 }
 ,{ 0,            0,           0          } // end
};

// skip
// char *data, char *data_end, 
map_parsers(data, data_end, parsers); // parse stream

UPD。只有一个快速库可以从内存中顺序读取位,字,对齐,未对齐等。我可以自己编写声明性前端甚至DSL。

1 个答案:

答案 0 :(得分:6)

来自AT& T的优秀人才PADS。还有RAGEL可以用于同一件事。我没有使用过我自己,但在this page找到了它们存在的暗示。

PADS看起来与Objective Systems和Google Protocol缓冲区的ASN1编译器类似;您编写一个模式文件,然后将其编译为您选择的源代码语言。不同的是,这两者适用于严格定义的二进制编码方案,而PADS似乎适用于任意数据流。

祝你好运!