#include char* itoa(int16_t i, char b[]){ char const digit[] = "0123456789"; char* p = b; if(i<0){ *p++ = '-'; i *= -1; } uint16_t shifter = i; do{ //Move to where representation ends ++p; shifter = shifter/10; }while(shifter); *p = '\0'; do{ //Move back, inserting digits as you go *--p = digit[i%10]; i = i/10; }while(i); return b; } char* itoa_fp(int16_t i, uint8_t frac, char b[]){ char const digit[] = "0123456789"; // set p to beginning of char array char* p = b; // If negative, set current char to '-' and inc, unnegate number if(i<0){ *p++ = '-'; i *= -1; } // Init shifter to numeric value uint16_t shifter = i; uint16_t frac_shifter = frac; // Iterate through 10s places, incrementing text pointer as we go do{ ++p; shifter = shifter/10; }while(shifter); ++p; // increment for decimal point do{ ++p; frac_shifter = frac_shifter/10; }while(frac_shifter); // Null-terminate the string *p = '\0'; // Go backwards and write out fractional digits do{ *--p = digit[frac%10]; frac = frac/10; }while(frac); *--p = '.'; // insert decimal point // Go backwards and write out remaining digits do{ *--p = digit[i%10]; i = i/10; }while(i); return b; }