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

时间:2011-04-28 13:58:40

标签: c parsing hex libxml2

我正在使用libxml2解析XML文件,我需要提取一个十六进制数字 来自xml属性。现在,lib2xml不提供以空字符结尾的字符串 对于属性,只需指向属性的开头和结尾。

所以,给定.........FILL:BB0011AA;...............(其中点表示任意 字符),char* begin指向FILL中的F和char* end指向 对于分号,我怎样才能有效地拉出十六进制数,而不用制作 复制到以空字符结尾的字符串?

1 个答案:

答案 0 :(得分:5)

像这样:

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

我认为即使begin处的数据根本不是字符串,即如果它不包含NUL终止符,上述内容也是安全的。如果找到任何非十六进制字符,%x将中止,因此不应该有任何冒险进入内存中la-la的风险。我无法想出一个可能会陷入困境的案例。