【问题标题】:limit qi::hex parser to 2 chars将 qi::hex 解析器限制为 2 个字符
【发布时间】:2014-10-20 13:28:11
【问题描述】:

我正在解析带有转义字符的字符串,我希望将 '\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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    用途:

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

    或者如果你正好需要 2 个,那就做吧

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2022-01-15
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多