你能为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
Run Code Online (Sandbox Code Playgroud)
UPD.只有一个快速库可以从内存中顺序读取位,字,对齐,未对齐等.我可以自己编写声明式前端甚至DSL.