我正在使用libxml2解析XML文件,我需要提取一个十六进制数字 来自xml属性。现在,lib2xml不提供以空字符结尾的字符串 对于属性,只需指向属性的开头和结尾。
所以,给定.........FILL:BB0011AA;...............
(其中点表示任意
字符),char* begin
指向FILL
中的F和char* end
指向
对于分号,我怎样才能有效地拉出十六进制数,而不用制作
复制到以空字符结尾的字符串?
答案 0 :(得分:5)
像这样:
unsigned int value;
if(sscanf(begin, "FILL:%x;", &value) != 1)
printf("Parse error\n");
我认为即使begin
处的数据根本不是字符串,即如果它不包含NUL
终止符,上述内容也是安全的。如果找到任何非十六进制字符,%x
将中止,因此不应该有任何冒险进入内存中la-la的风险。我无法想出一个可能会陷入困境的案例。