我正在使用转义字符解析字符串,我想要' \ 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
的链接谢谢!
答案 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
...)