diff --git a/stringhelpers.c b/stringhelpers.c new file mode 100644 --- /dev/null +++ b/stringhelpers.c @@ -0,0 +1,72 @@ +#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; +} +