c:解析长字符串中的十六进制数

Jac*_*cko 1 c parsing hex libxml2

我正在使用libxml2解析XML文件,我需要从xml属性中提取一个十六进制数.现在,lib2xml没有为属性提供一个以空字符结尾的字符串,只是指向属性的开头和结尾.

因此,给定.........FILL:BB0011AA;............... (其中点表示任意字符),并char* begin指向F in FILL,并char* end指向分号,如何有效地拉出十六进制数,而不将副本复制为空终止字符串?

unw*_*ind 5

像这样:

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

我认为即使数据at begin不是字符串,即使它不包含NUL终结符,上述内容也是安全的.由于%x如果找到任何非十六进制字符将中止,则不应该有任何冒险进入内存中的la-la域的风险.我无法想出一个可能会遇到困难的案例.