十六进制IP到十进制IP转换

时间:2011-12-08 03:58:12

标签: c

如何转换十六进制ip(例如42477f35),并让它吐出正确的十进制ip(在之前的例子中,正确的结果是66.71.127.53)?

我希望将hex ip in作为字符串,然后将正确的结果输出为字符串,以便我可以在C代码的其他地方使用它。

我不是C的专家,所以如果你们中的任何人能帮助我,我们将不胜感激。

3 个答案:

答案 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拆分为八位字节(一次两个十六进制数字),并将每个八位字节转换为十进制整数。