代码之家  ›  专栏  ›  技术社区  ›  Ian

如何将IPv4地址转换为十进制

c
  •  -9
  • Ian  · 技术社区  · 6 年前

    是否有函数将点分十进制表示法(例如“192.168.0.1”)中的IPv4地址转换为十进制值?

    有几个与此类似的问题,但都在寻找或得到涉及编写函数来解决问题的答案。我在图书馆找一个现有的函数。

    3 回复  |  直到 6 年前
        1
  •  0
  •   user2371524    6 年前

    strtoul()

    int parseIpv4Address(uint32_t *addr, const char *addrStr)
    {
        const char *p = addrStr;
        char *endp;
    
        unsigned long a = strtoul(p, &endp, 10);
        if (*endp != '.') return -1;
        unsigned long b = strtoul(p = endp+1, &endp, 10);
        if (*endp != '.') return -1;
        unsigned long c = strtoul(p = endp+1, &endp, 10);
        if (*endp != '.') return -1;
        unsigned long d = strtoul(p = endp+1, &endp, 10);
        if (*endp) return -1;
    
        *addr = (uint32_t) ((a << 24) | (b << 16) | (c << 8) | d);
        return 0;
    }
    

    unsigned long

        2
  •  0
  •   Chris Turner    6 年前

    inet_pton

    #include <stdio.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    int main(void)
        {
        struct in_addr result;
    
        if(inet_pton(AF_INET,"127.0.0.1",&result))
            {
            printf("%08x\n",result.s_addr);
            }
        else
            {
            printf("Failed\n");
            }
        return(0);
        }
    

    ntohl

        3
  •  0
  •   Ian    6 年前

    inet_addr()

    #include <stdio.h>
    #include <winsock2.h>
    
    int main(void)
    {
        char* pAddr = "192.168.0.1";
    
        unsigned long value = inet_addr(pAddr);
    
        if (value == INADDR_NONE)
            printf("Invalid format of IP address");
        else
            printf("Decimal representation of %s is: %lu", pAddr, value);
    
        return 0;
    }