今天去艺龙面试,面试的时候的一个面试题,题目是给一个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;
}
本文记录了在艺龙面试中遇到的一道题目,即如何将一个uint32_t类型的整数转换为IP地址字符串。通过解析每个八位段并处理不同情况,例如零填充和省略前导零,实现这一转换。提供的代码测试用例包括从0x0到0xFFFFFFFF以及一些随机数值。
3941

被折叠的 条评论
为什么被折叠?



