题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

//整数与ip地址间的转化
#include "stdio.h"
#include "string.h"
#define      uint8_t             unsigned char
#define      int8_t              signed char
#define      uint16_t            unsigned short
#define      int16_t             signed short
#define      uint32_t            unsigned int
#define      int32_t             signed int

uint32_t ip_to_bin(uint8_t* array)
{  
    uint32_t res = array[3] + (array[2]<<8) + (array[1]<<16) + (array[0]<<24);
    printf("%u\n",res);//注意打印,%d容量不够
    return res;
}

uint8_t bin_to_ip(uint32_t number)
{
    //为什么要与0xff?因为32位数据,我们每次只要低8位,右移后有些数据会长于8位,所以用0xff截掉前面的高位。
    printf("%d.%d.%d.%d\n",number>>24,number>>16&0xff,number>>8&0xff,number&0xff);
    return 0;
}

uint8_t if_ip_addr(uint8_t* addr,uint8_t len)
{
    int ret = 0;
    for(uint8_t i=0;i<len;i++)
    {
        if(addr[i]=='.')
            ret = 1;
    }
    return ret;
}
int main()
{
    uint8_t input_data[32] = {0};
    while (gets(input_data))
    {
        uint8_t is_ip_addr = 0;
        is_ip_addr = if_ip_addr(input_data,strlen(input_data));
        if(is_ip_addr)
        {
            uint8_t ip_array[4] = {0};
            sscanf(input_data,"%d.%d.%d.%d",&ip_array[0],&ip_array[1],&ip_array[2],&ip_array[3]);
            ip_to_bin(ip_array);
        }
        else{
            uint32_t number = 0;
            sscanf(input_data,"%u",&number);
            bin_to_ip(number);
        }
    }
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务