64,685
社区成员
发帖
与我相关
我的任务
分享
char* itoa(int value, char *string, int radix)
{
if(string == NULL) return NULL;
if(radix <2 || radix > 36)
{
string[0] = 0;
return string;
}
static int i = 0;
if(value < 0)
{
string[i]='-';
i++;
value = -1 * value;
}
if(value / radix > 0) itoa(value/radix,string,radix);
if(value % radix < 10) string[i]=value % radix + '0';
else string[i] = value % radix - 10 + 'A';
string[i+1]=0;
i++;
return string;
}
char* asd (int value, char *string, int radix)
{
static int i = 0;
if(value < 0)
{
string[i]='-';
i++;
value = -1 * value;
}
if(value / radix > 0)
itoa(value/radix,string,radix);
if(value % radix < 10)
string[i]=value % radix + '0';
else
string[i] = value % radix - 10 + 'A';
string[i+1]=0;
i++;
return string;
}
char *myitoa( int value, char *str, int radix =10 )
{
static char szMap[] = {
'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b',
'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z'
}; // 字符映射表
int nCount = -1, nIndex;
char *pStr = str, nTemp;
if ( radix >= 2 && radix <= 36 )
{ // 限制radix必须在2到36之间
if ( value < 0 && radix == 10 )
{ // 如果是负数就在首位添加负号,并将字符串前移
*pStr++ = '-';
value = -value; //转为正数,
}
unsigned int nValue = *(unsigned*)&value;
do { // 循环转换每一个数字,直到结束
pStr[ ++nCount ] = szMap[ nValue % radix ];
nValue /= radix;
} while( nValue > 0 ); // 转换结束后字符串是翻的
nIndex = ( nCount + 1 ) / 2; // 计算出一半的长度
while( nIndex-- > 0 ) { // 将字符串的字符序翻转
nTemp = pStr[ nIndex ];
pStr[ nIndex ] = pStr[ nCount - nIndex ];
pStr[ nCount - nIndex ] = nTemp;
}
}
pStr[ nCount + 1 ] = '\0'; // 置结束符
return str;
}