char* itoa(int value, char* str, int radix)
{
if (nullptr == str) {
return nullptr;
}
if (radix > 36 || radix < 2) { //基础类库一般最大到36进制,最小2进制
return nullptr;
}
char strtemp[33]; //对于最小的进制2,一个int,4个字节,32位
bool negative = true;
unsigned valuetemp;
negative = (radix == 10 && value < 0);
if (negative) {
valuetemp = -value; //如果是10进制,直根据负数还是正数进行转化就行
}
else {
valuetemp = (unsigned)value; //如果不是10进制,根据反码,补码的知识,把value转成unsigned类型
}
char* tp = strtemp;
int i = 0;
while (valuetemp) {//转化过程
i = valuetemp % radix;
valuetemp = valuetemp / radix;
if (i < 10) {
*tp++ = i + '0';
}
else {
*tp++ = i + 'a' - 10;
}
}
char* sp = str;
if (negative) {
*sp++ = '-';
}
while (tp > strtemp) {
*sp++ = *--tp;
}
*sp = 0;
return str;
}