2011-04-28 81 views
1

我使用libxml2解析XML文件,並且需要從xml屬性中提取十六進制數 。現在,lib2xml不會爲該屬性給出以NULL結尾的字符串 ,只是指向該屬性的開始和結尾的指針。c:解析長字符串內的十六進制數字

因此,鑑於.........FILL:BB0011AA;...............(其中點表示任意 字符),char* beginFILL指向F和char* end指向 到分號,我怎樣纔能有效地拉出十六進制數,未做 一個複製到一個空字符串?

回答

5

像這樣:

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

我覺得上面是安全的,即使在begin數據不是字符串所有,即如果它不包含NUL終止。由於如果找到任何非十六進制字符,%x將會中止,因此不應該有任何風險進入內存中的la-la land。我無法想出一個會橫行的情況。

+0

很酷。我認爲開始必須指向一個以空字符結尾的字符串。 – Jacko 2011-04-28 14:03:22

+0

'value'實際上應該是'unsigned int'類型。 – 2011-04-28 14:09:12

+0

謝謝,放鬆。而且,'begin'可能在最後有一個空終止符。但是,顯然,出於性能方面的原因,我不希望解析到達那裏。 – Jacko 2011-04-28 14:15:44

相關問題