Files @ 6d43230d5986
Branch filter:

Location: therm/system/stringhelpers.c

matthewreed
Untested changes for RTDs
#include <inttypes.h>

char const digit[] = "0123456789";

char* zitoa(int16_t i, char b[]){

    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[]){

    // 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;
}