#include <iostream>
using namespace std
;
void reverse(char str
[], int length
)
{
int start
= 0;
int end
= length
-1;
while (start
< end
)
{
swap(*(str
+start
), *(str
+end
));
start
++;
end
--;
}
}
char* itoa(int num
, char* str
, int base
)
{
int i
= 0;
bool isNegative
= false
;
if (num
== 0)
{
str
[i
++] = '0';
str
[i
] = '\0';
return str
;
}
if (num
< 0 && base
== 10)
{
isNegative
= true
;
num
= -num
;
}
while (num
!= 0)
{
int rem
= num
% base
;
str
[i
++] = (rem
> 9)? (rem
-10) + 'a' : rem
+ '0';
num
= num
/base
;
}
if (isNegative
)
str
[i
++] = '-';
str
[i
] = '\0';
reverse(str
, i
);
return str
;
}
int main()
{
char str
[100];
cout
<< "Base:10 " << itoa(1567, str
, 10) << endl
;
cout
<< "Base:10 " << itoa(-1567, str
, 10) << endl
;
cout
<< "Base:2 " << itoa(1567, str
, 2) << endl
;
cout
<< "Base:8 " << itoa(1567, str
, 8) << endl
;
cout
<< "Base:16 " << itoa(1567, str
, 16) << endl
;
return 0;
}
char* itoa(int value
, char* result
, int base
) {
if (base
< 2 || base
> 36) { *result
= '\0'; return result
; }
char* ptr
= result
, *ptr1
= result
, tmp_char
;
int tmp_value
;
do {
tmp_value
= value
;
value
/= base
;
*ptr
++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value
- value
* base
)];
} while ( value
);
if (tmp_value
< 0) *ptr
++ = '-';
*ptr
-- = '\0';
while(ptr1
< ptr
) {
tmp_char
= *ptr
;
*ptr
--= *ptr1
;
*ptr1
++ = tmp_char
;
}
return result
;
}
引用地址 http://www.strudel.org.uk/itoa/
转载请注明原文地址: https://yun.8miu.com/read-138303.html