how to convert IP address in char[] to Uint32_t in c?

后端 未结 2 1186
太阳男子
太阳男子 2021-01-18 02:43

I write a program which takes IP address as an argument and i wanted to store this IP address in the unit32_t. I can easily convert uint32_t to back to character array. How

相关标签:
2条回答
  • 2021-01-18 03:07

    In case you don't have access to inet_* functions or need to code this yourself due to any other strange reason, you can use a function like this:

    #include <stdio.h>
    
    /**
     * Convert human readable IPv4 address to UINT32
     * @param pDottedQuad   Input C string e.g. "192.168.0.1"
     * @param pIpAddr       Output IP address as UINT32
     * return 1 on success, else 0
     */
    int ipStringToNumber (const char*       pDottedQuad,
                                  unsigned int *    pIpAddr)
    {
       unsigned int            byte3;
       unsigned int            byte2;
       unsigned int            byte1;
       unsigned int            byte0;
       char              dummyString[2];
    
       /* The dummy string with specifier %1s searches for a non-whitespace char
        * after the last number. If it is found, the result of sscanf will be 5
        * instead of 4, indicating an erroneous format of the ip-address.
        */
       if (sscanf (pDottedQuad, "%u.%u.%u.%u%1s",
                      &byte3, &byte2, &byte1, &byte0, dummyString) == 4)
       {
          if (    (byte3 < 256)
               && (byte2 < 256)
               && (byte1 < 256)
               && (byte0 < 256)
             )
          {
             *pIpAddr  =   (byte3 << 24)
                         + (byte2 << 16)
                         + (byte1 << 8)
                         +  byte0;
    
             return 1;
          }
       }
    
       return 0;
    }
    
    0 讨论(0)
  • 2021-01-18 03:16

    You use the inet_pton. function

    And for the other way around you should have used inet_ntop.


    For Windows-specific documentation, see inet_pton and inet_ntop.


    Note that the functions can be used for both IPv4 and IPv6.

    0 讨论(0)
提交回复
热议问题