ци :: повтор (1,2) Funtion в правиле дает мне warrning и я не хочу, чтобы игнорировать это предупреждение, поэтому я хочу, чтобы этот код оптимизирован как отделяя правило от метод парсерирования.функцию в правиле духа Определение дает предупреждение
й :: phrase_parse делает то же самое, которое в в правиле, но я хочу, чтобы Sperate правила и дать правила к pharse_parse Funtion.
std::ifstream ifs("f:/test.txt");
std::string line;
//In header in my code
std::vector<unsigned long long> v_BF_Char;
//qi::int_parser<uintmax_t, 16> hex_int;
static qi::uint_parser<unsigned long long, 16, 16, 16> hex_int;
while (std::getline(ifs, line))
{
typedef std::string::const_iterator It;
It begin = line.begin(), end = line.end();
// rule for grammer
qi::rule<It, unsigned long long()> braced_hex = '<' >> qi::repeat(1,2)[hex_int] >> '>';
bool ok = qi::phrase_parse(begin, end,
*('<' >> qi::repeat(1,2)[ hex_int ] >> '>'), qi::space, v_BF_Char);
и хотите сделать Somthing как этот
bool ok = qi::phrase_parse(begin, end,
braced_hex , qi::space, v_BF_Char);
test.txt Содержать
<51dc> <04001C0180000000000000000EE317BC>
<05001C0180000000> <04001C0180000000000000000EE317BC>
<51dc> <30ea30f330ae30c330c8>
<0000> <fffd>
<003d> <00a5>
<005d> <00a6>
<005e> <007d>
<005f> <0303>
<0060> <2019>
<0061> <005c>
<0062> <2018>
<0063> <007c>
<0064> <007e>
<0068> <2044>
<0069> <0192>
<006a> <00a7>
<006b> <00a4>
<006c> <201c>
Мой код работает только для 2-го ряда и извлечения значений в векторе, но не другие строки.
до редактирования, так как мой ответ: Вы должны решить, что это значит, когда вы разбираете менее 16 шестнадцатеричных цифр. Означает ли это ведущие нули? Что такое порядок байтов? Вы действительно хотели разобрать просто 'std :: vector'? –
sehe
Также этот вопрос кажется устрашающе похожим, возможно, он может вам помочь: http://stackoverflow.com/questions/30365628/function-or-functor-calling-using-sprit-boost-parser-library-rule-to-save -значения/30366329 # 30366329 – sehe