【发布时间】:2013-05-21 04:20:26
【问题描述】:
您能否推荐一个经过验证的 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。
【问题讨论】:
-
C 没有流结构,也许如果你给我们一些示例数据,以及你从哪里得到它,即 FIFO、命名管道等,那么我们可以为你指出一个工具或库.
-
char* 已经足够好了。示例:
-
向问题添加示例
-
@Grady - “流”是一个常用词,与语言或库支持无关,重点通常是避免源是文件、网络连接或其他什么的问题,并专注于数据的结构。