Integer to IP Address - C

后端 未结 9 760
陌清茗
陌清茗 2020-12-07 17:45

I\'m preparing for a quiz, and I have a strong suspicion I may be tasked with implementing such a function. Basically, given an IP address in network notation, how can we ge

相关标签:
9条回答
  • 2020-12-07 18:38
    #include "stdio.h"
    
    void print_ip(int ip) {
       unsigned char bytes[4];
       int i;
       for(i=0; i<4; i++) {
          bytes[i] = (ip >> i*8) & 0xFF;
       }
       printf("%d.%d.%d.%d\n", bytes[3], bytes[2], bytes[1], bytes[0]);
    }
    
    int main() {
       int ip = 0xDEADBEEF;
       print_ip(ip);   
    }
    
    0 讨论(0)
  • 2020-12-07 18:38

    From string to int and back

    const char * s_ip = "192.168.0.5";
    unsigned int ip;
    unsigned char * c_ip = (unsigned char *)&ip;
    sscanf(s_ip, "%hhu.%hhu.%hhu.%hhu", &c_ip[3], &c_ip[2], &c_ip[1], &c_ip[0]);
    printf("%u.%u.%u.%u", ((ip & 0xff000000) >> 24), ((ip & 0x00ff0000) >> 16), ((ip & 0x0000ff00) >> 8), (ip & 0x000000ff));
    

    %hhu instructs sscanf to read into unsigned char pointer; (Reading small int with scanf)


    inet_ntoa from glibc

    char *
    inet_ntoa (struct in_addr in)
    {
    unsigned char *bytes = (unsigned char *) &in;
    __snprintf (buffer, sizeof (buffer), "%d.%d.%d.%d",
    bytes[0], bytes[1], bytes[2], bytes[3]);
    return buffer;
    }
    
    0 讨论(0)
  • 2020-12-07 18:44

    Hint: break up the 32-bit integer to 4 8-bit integers, and print them out.

    Something along the lines of this (not compiled, YMMV):

    int i = 0xDEADBEEF; // some 32-bit integer
    printf("%i.%i.%i.%i",
              (i >> 24) & 0xFF,
              (i >> 16) & 0xFF,
              (i >> 8) & 0xFF,
              i & 0xFF);
    
    0 讨论(0)
提交回复
热议问题