gpt4 book ai didi

c - 从 "0x4000"(例如)字符串获取十六进制值并将其存储在变量中。

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:57 28 4
gpt4 key购买 nike

这是我的问题:

我编写了一个函数来检测字符串是否基于“0x####”格式的十六进制:

int lc3_hashex(char *str)
{
int val = 0;
char *to;
to = strndup(str+2, 10);
val = sscanf(to, "%x", &val);
if (val)
{
return val;
}

return 0;
}

假设参数的形式为“0x####”,它返回帖子“0x”数字的十进制版本。但是是否有任何内置方式(或我刚刚监督的方式)来获取十六进制数“0x4000”的整数值而不是“4000”的整数值?

谢谢。

最佳答案

您可以将该函数简化为:

int cnt = sscanf(str, "%x", &val);
if (cnt == 1) {
// read a valid `0xNNNN` string
}
具有 %x 格式的

scanf 已经进行了十六进制转换,并且可以很好地处理 0x 前缀。此外,它的返回值是匹配项的数量,因此您可以使用它来确定它是否确实在 str 中找到了一个十六进制值。

有了它,您就拥有了所需的两条信息:字符串的格式是否符合您的预期,以及它的值是多少(正确转换)。它还避免了字符串分配(您没有释放),以及如果 strlen(str) 小于两个则您的代码存在的错误。

如果您将函数签名更改为:

int check_and_get_hex(const char *str, int *val);

(或类似的东西),相应地更新 sscanf 调用(传递 val 而不是 &val),然后返回 ( cnt == 1),您可以一次获得“它是一个有效的十六进制字符串”和调用者的值。

关于c - 从 "0x4000"(例如)字符串获取十六进制值并将其存储在变量中。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869093/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com