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

发布于 2024-11-03 20:54:53 字数 312 浏览 1 评论 0原文

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

因此,给定 .........FILL:BB0011AA;......................... (其中点表示任意 字符),char* begin 指向 FILL 中的 F,char* end 指向 到分号,我怎样才能有效地提取十六进制数字,而不需要 复制到以空结尾的字符串中?

I am parsing an XML file using libxml2, and I need to pull out a hex number
from an xml attribute. Now, lib2xml doesn't give a null terminated string
for the attribute, just pointers to the beginning and end of the attribute.

So, given .........FILL:BB0011AA;............... (where dots indicate arbitrary
characters), and char* begin pointing to the F in FILL, and char* end pointing
to the semi-colon, how can I efficiently pull out the hex number, WITHOUT making
a copy into a null terminated string?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

喜爱纠缠 2024-11-10 20:54:53

就像这样:

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

我认为即使 begin 处的数据根本不是字符串,即如果它不包含 NUL 终止符,上面的内容也是安全的。由于如果发现任何非十六进制字符,%x 将中止,因此不应该有任何它跑入内存中的风险。我想不出它会疯狂运行的情况。

Like so:

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

I think the above is safe even if the data at begin isn't a string at all, i.e. if it doesn't contain a NUL terminator. Since the %x will abort if any non-hexadecimal character is found, there shouldn't be any risk of it running off into la-la land in memory. I can't come up with a case where it would run amok.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文