2011-04-28 12 views
1

私はlibxml2を使用してXMLファイルを解析しており、xml属性から16進数の を取り出す必要があります。今、lib2xmlは、属性の先頭と末尾へのポインタだけで、NULL終了文字列 を属性に与えません。c:長い文字列内の16進数を解析する

したがって、所与の(ドットが任意 文字を示す).........FILL:BB0011AA;...............、及びFILLにFを指しchar* begin、及びchar* end ことなく、私は効率的に進数を引き出すことができる方法、セミコロンに ポインティングヌル終了文字列にコピーしますか?そのよう

答えて

5

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

私は上記のそれはNULターミネータが含まれていない場合beginのデータは、全くすなわちを文字列でない場合であっても安全だと思います。 %xは、16進数でない文字が見つかった場合に中断しますので、メモリ内のラ・ラ・ランドに流出する危険はありません。私はそれがアモックになるケースを思いつくことはできません。

+0

Cool。私は、beginはヌル終了文字列を指さなければならないと考えました。 – Jacko

+0

'value'は実際には' unsigned int'型でなければなりません。 –

+0

ありがとうございました。そして、 'begin'はおそらく最後にヌルターミネーターを持っています。しかし、パフォーマンス上の理由から、私はそこに到達するために解析することは望ましくありません。 – Jacko

関連する問題