如何转换十六进制ip(例如42477f35
),并让它吐出正确的十进制ip(在之前的例子中,正确的结果是66.71.127.53
)?
我希望将hex ip in作为字符串,然后将正确的结果输出为字符串,以便我可以在C代码的其他地方使用它。
我不是C的专家,所以如果你们中的任何人能帮助我,我们将不胜感激。
答案 0 :(得分:4)
这是一种可能性:
#include <stdio.h>
int ip_hex_to_dquad(const char *input, char *output, size_t outlen)
{
unsigned int a, b, c, d;
if (sscanf(input, "%2x%2x%2x%2x", &a, &b, &c, &d) != 4)
return -1;
snprintf(output, outlen, "%u.%u.%u.%u", a, b, c, d);
return 0;
}
答案 1 :(得分:3)
您可以使用sscanf从原始字符串中选择十六进制作为整数,然后使用sprintf将它们以正确的格式放入另一个字符串中。
sscanf(hexipstring, "%2x%2x%2x%2x", &uint0, &uint1, &uint2, &uint3);
sprintf("%u.%u.%u.%u", uint0, uint1, uint2, uint3);
或类似的东西。我从来都不确定scanf,所以请阅读一些手册页。 “%2x”应告诉scanf最多使用2个字符,并将它们解释为十六进制数。
-edit:Caf的代码更好,因为它检查sscanf中的错误并使用snprintf而不是sprintf。更多的errorproof。用它代替我的。
答案 2 :(得分:-1)
将hex ip拆分为八位字节(一次两个十六进制数字),并将每个八位字节转换为十进制整数。