void reversestr(char* pstr)
{
if (pstr == nullptr)
return;
char* pBegin = pstr;
char* pEnd = pstr;
while (*pEnd)
{
++pEnd;
}
--pEnd;
while (pEnd > pBegin)
{
*pBegin = *pBegin ^ *pEnd;
*pEnd = *pBegin ^ *pEnd;
*pBegin = *pBegin ^ *pEnd;
++pBegin;
--pEnd;
}
}
char GetChar(int num)
{
static char numtable[16]{ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };
if (num >= 0 && num < 16)
return numtable[num];
return '#';
}
//不要去保存返回值,其逻辑有效性在下一次调用时失效
const char* myitoa(int num,int radix) // 0x00000000~0x7FFFFFFF 绝对值范围内地正负数都可以正常显示;对于 0x80000000 计算机科学上没有显示的必要,这里显示为带符号的-0x80000000
{
static char resout[34]{};
char res[34]{};//二进制最多32位需要字符显示+符号字符+null字符结束
bool signal = false;
unsigned int Num = 0;
Num = num;//如果是无符号数直接赋值
//先转正数处理
if (num < 0)
{
signal = true;
Num = -num;//有符号数先取反再整型提升=》以一字节宽度举例 比如0xFF (-1) 取反后整型提升 还是1 但是如果直接整型提升就是255
}
int i = 0;
while (Num)//获得反序的字符串
{
res[i] = GetChar(Num % radix);
Num = Num / radix;
++i;
}
if (signal)//处理符号
{
int size = strlen(res);
res[size] = '-';
}
reversestr(res);//反转反序字符串得到正确字符串
strcpy(resout, res);
return resout;
}
int main()
{
cout << myitoa(0x1a2b3c, 16) << endl;
cout << myitoa(0x1a2b3c, 10) << endl;
cout << myitoa(0x1a2b3c, 2) << endl;
cout << myitoa(0x80000001, 16) << endl;
cout << myitoa(0xFFFFFFFF, 16) << endl;
cout << myitoa(0x80000000, 16) << endl;
return 0;
}
itoa实现优化:将整数转化为任意进制下的字符表述
最新推荐文章于 2024-05-02 18:32:42 发布