将qi :: hex解析器限制为2个字符

时间:2014-10-20 13:28:11

标签: c++ boost-spirit boost-spirit-qi

我正在使用转义字符解析字符串,我想要' \ xYY'用YY代码解析为字符。据我所知qi :: hex。但我只需要解析两个后续字符,而不是更多。所以" \ x30kl"是正确解析的,但不是" \ x30fl",因为qi :: hex解析' 30f',而不仅仅是' 30'。问题是如何限制十六进制解析长度?

这是我的语法:

template <typename Iterator>
struct gram : qi::grammar<Iterator, std::string(), ascii::space_type> {
    gram() : gram::base_type(start) {    
        start %= "'" >> *(string_char) >> "'";
        string_char = ("\\" >> qi::char_('\'')) | 
                      ("\\x" >> qi::hex)        |
                      (qi::print - "'");
    }    
    qi::rule<Iterator, std::string(), ascii::space_type> string_char, start;
};

这是与Coliru:http://coliru.stacked-crooked.com/a/ba96c7410c772c87

的链接

谢谢!

1 个答案:

答案 0 :(得分:3)

使用:

qi::int_parser<unsigned char, 16, 1, 2> hex2_;

或者,如果您需要2,请将其设为

qi::int_parser<unsigned char, 16, 2, 2> octet_;

请注意,unsigned char现在是公开的属性。如果您愿意,可以使用char(或int ...)