nixawk / hello-c

c programming
9 stars 11 forks source link

c - print ip from integer #8

Open nixawk opened 7 years ago

nixawk commented 7 years ago
#include <stdio.h>

typedef unsigned char u_char;
typedef unsigned int  u_int;
typedef unsigned int  bool;

void pr_ipaddr(u_int);
bool is_little_endian(void);

/* check memory endian */
bool
is_little_endian(void)
{
    u_int x = 0x11223344;

    return *(u_char *)&x == 0x44;
}

/* Translate a integer to a ipaddr string */
void
pr_ipaddr(u_int hex)
{
    u_char *ptr = NULL;
    u_int  index = 0;

    if (0xFFFFFFFF <= hex && hex <= 0x00000000)
    {
        printf("pr_ipaddr failed - invalid ip range\n");
    } else {
        ptr = (u_char *)&hex;
        if (is_little_endian()) {
            printf("%#x -> %d.%d.%d.%d\n", hex, ptr[3], ptr[2], ptr[1], ptr[0]);
        } else {
            printf("%#x -> %d.%d.%d.%d\n", hex, ptr[0], ptr[1], ptr[2], ptr[3]);
        }
    }
}

int
main(void)
{
    pr_ipaddr(0xFFFFFFFF);
    pr_ipaddr(-1);
    return 0;
}