关于超长大整数无法使用unsigned int进行存储的问题

我们知道,一般在32位机子上,unsigned int是32位的,也就是说,该数据类型的最大上限是4294967295,这是10位的,如果再大,该数据类型就无法存储了,也许大家会说,

我们可以使用char*类型啊,但是对于一些运算char*类型是很不方便的,比如啊,仅仅是比如,我们在进行破解的时候,暴力破解的时候,我们要对出他的密码,首先进行比较简

单的数字比对。这时候我们使用数字进行简单的++运算就可以,但是如果是char*类型的话,该运算就不能成立了,只能使用一种算法来实现,这样的话费时费力,但是如果使用

结构体的话,就很简单了,比如LARGE_INTEGER数据类型,(好像是这个数据类型),现在说下我自己实现的吧

	int lowPart=0;
	int highPart=0;
         lowPart++;
	if(lowPart==4294967295)
	{
		highPart++;
		lowPart=0;//这里其实不用赋值等于0,其下一次lowPart++y也会是0
	}
	memset(pwd,0,20);
	//检测lowPart是几位数,然后进行填充0
	if(lowPart<10 if="" highpart="" 0="" sprintf="" pwd="" d000000000="" d="" highpart="" lowpart="" else="" sprintf="" pwd="" 00000="" d="" lowpart="" else="" if="" lowpart="">=10&&lowPart<=99)
	{
		//说明是两位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d00000000%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"0000%d",lowPart);
		}
	}else if(lowPart>=100&&lowPart<=999)
	{
		//说明是三位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d0000000%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"000%d",lowPart);
		}
	}else if(lowPart>=1000&&lowPart<=9999)
	{
		//说明是四位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d000000%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"00%d",lowPart);
		}
	}else if(lowPart>=10000&&lowPart<=99999)
	{
		//说明是五位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d00000%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"0%d",lowPart);
		}
	}else if(lowPart>=100000&&lowPart<=999999)
	{
		//说明是6位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d0000%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"%d",lowPart);
		}
	}else if(lowPart>=1000000&&lowPart<=9999999)
	{
		//说明是7位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d000%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"%d",lowPart);
		}
	}else if(lowPart>=10000000&&lowPart<=99999999)
	{
		//说明是8位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d00%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"%d",lowPart);
		}
	}else if(lowPart>=100000000&&lowPart<=999999999)
	{
		//说明是9位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d0%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"%d",lowPart);
		}
	}else if(lowPart>=1000000000&&lowPart<=9999999999)
	{
		//说明是10位数
		if(highPart!=0)
		{
			sprintf(pwd,"%d%d",highPart,lowPart);
		}
		else
		{
			sprintf(pwd,"%d",lowPart);
		}
	}
	
	

  

这是从我的项目中提炼出来的一部分,我想实现的是6位数字000000到4294967295 4294967295的以步长为1进行增长的全过程,进行比对

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/dasgk/article/details/9398999
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞