uint32_t转换成IP字符串

来源:互联网 发布:网络红猫红小胖 编辑:程序博客网 时间:2024/04/28 02:50

今天去艺龙面试,面试的时候的一个面试题,题目是给一个uint32_t的一个整数,转换成IP字符串

 

大概思路是对的,每次取8位进行处理,然后字符串内加入一个'.',最后再用'\0'代替最后一个'.'

然后8位数字0-255,当然012这种0是不展现的,最后000的情况还需要补0,当时在纸上写的时候0处理得不够好,回来以后想了想,设一个flag标志表示是否前面已经有大于0的数,有的话'0' 就加入字符串,没有的话省略,最后如果flag没有被重置的话就补一个'0'。

大概思路就是这样,下面附上代码

测试用例用了0x0->0.0.0.0、0xFFFFFFFF->255.255.255.255

然后一些比较随机和综合的数0x0x64646464->100.100.100.100、0x66164E00->102.22.78.64

 

char* changeIP(uint32_t num){char *res=new char[16];char *p=res;for (int i=0;i<4;i++){uint32_t tmp=(num>>((3-i)*8))&0xFF ;p=make8Bit(p,tmp);}p--;*p='\0';return res;}char* make8Bit(char *p,uint32_t num){//char *res=p;char *q=p;bool flag=false;for (int i=2;i>=0;i--){int carry=num/pow(10,i);if (carry>0){*(p++)=carry+'0';flag=true;}else{if(flag){ *(p++)=carry+'0';}}num = num % (int)pow(10,i);}if (!flag){*(p++)='0';}*(p++)='.';return p;}


 

0 0