所以,我得到这个数据。从网络套接字,或从一个文件。我拼凑在一起将解释数据的代码。读取一些字节,检查一些标志,一些字节表示多少数据。读入很多数据,冲洗,重复。 这个任
这个任务让我想起来解析源代码。我很喜欢lex / yacc和antlr,但是他们没有得到这个任务。你不能指定位和原始字节作为标记(好吧,也许你可以,但我不知道如何),你不能将它们哄到“读取两个字节,使它们成为一个无符号的16位整数,称之为n,然后读取n个字节。“
再次,当以系统的方式定义协议/数据格式的规格(并非全部都是这样)时,应该有系统的方法来读取根据协议格式化的数据。对?
必须有一个这样做的工具。
您可以尝试使用最近获得 binary parsing tools(07)的 Boost.Spirit(v2)版本, native和 mixed parsers// This is not a complete and useful example, but just illustration that parsing // of raw binary to real data components is possible typedef boost::uint8_t byte_t; byte_t raw[16] = { 0 }; char const* hex = "01010000005839B4C876BEF33F83C0CA"; my_custom_hex_to_bytes(hex, raw, 16); // parse raw binary stream bytes to 4 separate words boost::uint32_t word(0); byte_t* beg = raw; boost::spirit::qi::parse(beg, beg + 16, boost::spirit::qi::dword, word))
更新:我发现类似的问题,Joel de Guzman在答复二进制解析器的可用性时确认:Can Boost Spirit be used to parse byte stream data?