/* A C++ program to implement itoa() */#include <iostream> using namespace std; /* A utility function to reverse a string */void reverse(char str[], int length) { int start = 0; int end = length -1; while (start < end) { swap(*(str+start), *(str+end)); start++; end--; } } // Implementation of itoa() char* itoa(int num, char* str, int base) { int i = 0; bool isNegative = false; /* Handle 0 explicitely, otherwise empty string is printed for 0 */ if (num == 0) { str[i++] = '0'; str[i] = ' '; return str; } // In standard itoa(), negative numbers are handled only with // base 10. Otherwise numbers are considered unsigned. if (num < 0 && base == 10) { isNegative = true; num = -num; } // Process individual digits while (num != 0) { int rem = num % base; str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0'; num = num/base; } // If number is negative, append '-' if (isNegative) str[i++] = '-'; str[i] = ' '; // Append string terminator // Reverse the string reverse(str, i); return str; } // Driver program to test implementation of itoa() 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) {// check that the base if validif (base < 2 || base > 36) { *result = ' '; 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 );// Apply negative signif (tmp_value < 0) *ptr++ = '-';*ptr-- = ' ';while(ptr1 < ptr) {tmp_char = *ptr;*ptr--= *ptr1;*ptr1++ = tmp_char;}return result;}
引用地址
http://www.strudel.org.uk/itoa/