1.整形转字符串
void Int2Str(u8* str, u32 intnum)
{
u32 i, Div = 1000000000, j = 0, Status = 0;
//32位无符号数最大是10位整数,所以Div=10 0000 0000
for (i = 0; i < 10; i++)
{
str[j++] = (intnum / Div) + '0';//取最高位 转化成字符
intnum = intnum % Div;//去掉最高位
Div /= 10;//还剩下10-i位要转换
if ((str[j-1] == '0') & (Status == 0))//忽略最高位的'0'
{
j = 0;
}
else
{
Status++;
}
}
}
u8 str[]={0};
Int2Str(str,2018);
printf("%s",str);
2.字符串转整形
方法一(垃圾!!!):
#define IS_CAP_LETTER(c) (((c) >= 'A') && ((c) <= 'F'))
#define IS_LC_LETTER(c) (((c) >= 'a') && ((c) <= 'f'))
#define IS_09(c) (((c) >= '0') && ((c) <= '9'))
#define ISVALIDHEX(c) (IS_CAP_LETTER(c) || IS_LC_LETTER(c) || IS_09(c))
#define ISVALIDDEC(c) IS_09(c)
#define CONVERTDEC(c) (c - '0')
#define CONVERTHEX_ALPHA(c) (IS_CAP_LETTER(c) ? ((c) - 'A'+10) : ((c) - 'a'+10))
#define CONVERTHEX(c) (IS_09(c) ? ((c) - '0') : CONVERTHEX_ALPHA(c))
u32 Str2Int(u8 *p_inputstr, u32 *p_intnum)
{
u32 i = 0, res = 0;
u32 val = 0;
if ((p_inputstr[0] == '0') && ((p_inputstr[1] == 'x') || (p_inputstr[1] == 'X')))
{
i = 2;
while ( ( i < 11 ) && ( p_inputstr[i] != '\0' ) )
{
if (ISVALIDHEX(p_inputstr[i]))
{
val = (val << 4) + CONVERTHEX(p_inputstr[i]);
}
else
{
/* Return 0, Invalid input */
res = 0;
break;
}
i++;
}
/* valid result */
if (p_inputstr[i] == '\0')
{
*p_intnum = val;
res = 1;
}
}
else /* max 10-digit decimal input */
{
while ( ( i < 11 ) && ( res != 1 ) )
{
if (p_inputstr[i] == '\0')
{
*p_intnum = val;
/* return 1 */
res = 1;
}
else if (((p_inputstr[i] == 'k') || (p_inputstr[i] == 'K')) && (i > 0))
{
val = val << 10;
*p_intnum = val;
res = 1;
}
else if (((p_inputstr[i] == 'm') || (p_inputstr[i] == 'M')) && (i > 0))
{
val = val << 20;
*p_intnum = val;
res = 1;
}
else if (ISVALIDDEC(p_inputstr[i]))
{
val = val * 10 + CONVERTDEC(p_inputstr[i]);
}
else
{
/* return 0, Invalid input */
res = 0;
break;
}
i++;
}
}
return res;
}
u8 strs[]="123456";
Str2Int(strs,&Num);
printf("%d\r\n",Num);
方法二(转载另一位网友的):
这里给出原文地址:https://blog.csdn.net/second60/article/details/80503335
int str2int1( char* str)
{
int temp = 0;
const char* p = str;
if(str == NULL) return 0;
if(*str == '-' || *str == '+')
{
str ++;
}
while( *str != 0)
{
if( *str < '0' || *str > '9')
{
break;
}
temp = temp*10 +(*str -'0');
str ++;
}
if(*p == '-')
{
temp = -temp;
}
return temp;
}