Boost Binary Endian parser not working?

Posted by Hai on Stack Overflow See other posts from Stack Overflow or by Hai
Published on 2010-05-19T22:51:52Z Indexed on 2010/05/19 23:10 UTC
Read the original article Hit count: 266

Filed under:
|
|

I am studying how to use boost spirit Qi binary endian parser. I write a small test parser program according to here and basics examples, but it doesn't work proper. It gave me the msg:"Error:no match".

Here is my code.

 
    #include "boost/spirit/include/qi.hpp"
    #include "boost/spirit/include/phoenix_core.hpp"
    #include "boost/spirit/include/phoenix_operator.hpp"
    #include "boost/spirit/include/qi_binary.hpp"  // parsing binary data in various endianness

template '<'typename P, typename T> void binary_parser( char const* input, P const& endian_word_type, T& voxel, bool full_match = true) { using boost::spirit::qi::parse;

   char const* f(input);
   char const* l(f + strlen(f));
   bool result1 = parse(f,l,endian_word_type,voxel);

   bool result2 =((!full_match) || (f ==l));
   if ( result1 && result2) {
       //doing nothing, parsing data is pass to voxel alreay                           
   } else {
            std::cerr << "Error: not match!!" << std::endl;
            exit(1);
   }

} typedef boost::uint16_t bs_int16; typedef boost::uint32_t bs_int32; int main ( int argc, char *argv[] ) { namespace qi = boost::spirit::qi; namespace ascii = boost::spirit::ascii;

using qi::big_word; using qi::big_dword; boost::uint32_t ui; float uf; binary_parser("\x01\x02\x03\x04",big_word,ui); assert(ui=0x01020304); binary_parser("\x01\x02\x03\x04",big_word,uf); assert(uf=0x01020304); return 0;

}'

I almost copy the example, but why this binary parser doesn't work. I use Mac OS 10.5.8 and gcc 4.01 compiler.

© Stack Overflow or respective owner

Related posts about boost-spirit

Related posts about binary