uint32_t转换成IP字符串

今天去艺龙面试,面试的时候的一个面试题,题目是给一个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;
}


 

你可能感兴趣的:(面试题)