c: разобрать шестнадцатеричное число внутри длинной строки - PullRequest
1 голос
/ 28 апреля 2011

Я анализирую XML-файл, используя libxml2, и мне нужно извлечь шестнадцатеричное число из атрибута xml.Теперь lib2xml не дает строку с нулевым символом в конце для атрибута, а только указатели на начало и конец атрибута.

Итак, учитывая .........FILL:BB0011AA;............... (где точки указывают произвольные символы), и char* beginуказывая на F в FILL, а char* end указывая на точку с запятой, как я могу эффективно вытащить шестнадцатеричное число, БЕЗ превращения копии в строку с нулевым символом в конце?

1 Ответ

5 голосов
/ 28 апреля 2011

Вроде так:

unsigned int value;
if(sscanf(begin, "FILL:%x;", &value) != 1)
   printf("Parse error\n");

Я думаю, что вышеупомянутое безопасно, даже если данные на begin вообще не являются строкой, т.е. если они не содержат терминатор NUL. Так как %x будет прерван, если будет найден какой-либо не шестнадцатеричный символ, не должно быть никакого риска того, что он попадет в область памяти в памяти. Я не могу придумать случай, когда он выйдет из-под контроля.

...