A.无符号整形数转字符串
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);
B.有符号整形转字符串
/**
****************************************************************
* @brief int2str
*
* 功能:将整形(int)数据转换成字符串
*
* @param: n = 要转换的整形数据
* @param: str = 存放字符串的首地址
* @param: length = 转换后字符串的长度
*
****************************************************************/
void int2str(int n, char *str,unsigned char *length)
{
char buf[6] = "";
int i = 0;
int len = 0;
// temp为n的绝对值
int temp = n<0?-n:n;
// 如果str为空,直接返回
if(str == NULL)
{
return ;
}
//把tmp的每一位的数存入buf
// 逆序存入,如1234 -> 在buf中为4321
//memset(CHAR,0,5);
while(temp)
{
buf[i++] = (temp%10) + '0';
temp = temp / 10;
}
//如果是负数多留一位放符串
len = n<0?++i:i;
*length = len;
str[i] = 0;
//反转字符串4321- 转成 -1234
while(1)
{
i--;
if(buf[len-i-1] == 0)
{
break;
}
str[i] = buf[len-i-1];
}
// 如果是符号,加回去
if(i==0)
{
str[i] = '-';//添加负号
}
}
方法一(不推荐):
#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;
}