int StrToDecInt1(const char* str)
{
static const int MAX = (int)((unsigned)~0 >> 1);//32位能表示的最大的正整数//
static const int MIN = -(int)((unsigned)~0 >> 1) - 1;//最小负整数//
static const int MAX_DIV = (int)((unsigned)~0 >> 1) / 10;
static const int MIN_DIV = (int)((((unsigned)~0 >> 1) + 1) / 10);
static const int MAX_R = (int)((unsigned)~0 >> 1) % 10;
static const int MIN_R = (int)((((unsigned)~0 >> 1) + 1) % 10);
int n =0;
int sign=1;
int c;
while(isspace(*str))
++str;
if (*str=='+'||*str=='-')
{
if (*str=='-')
{
sign=-1;
}
++str;
}
while (isdigit(*str))
{
c=*str-'0';
if (sign>0&&(n>MAX_DIV||(n==MAX_DIV&&c>=MAX_R)))//判断是否溢出
{
n=MAX;
break;
}
else if(sign<0&&(n>MIN_DIV||(n==MIN_DIV&&c>=MIN_R)))//判断是否溢出
{
n=MIN;
break;
}
n=n*10+c;
++str;
}
return sign >0?n:-n;
}
字符串转整形
最新推荐文章于 2023-05-15 11:10:06 发布