William Lane wrote:
Well being a newbie to the microcontroller world I am learning that you
have to find more efficient ways of figuring things out. So to answer
my own question: strtok the decimal, count the decimal places, combine
the parsed sections, atoi/atol and then use fixed point math.
Here is what I did for stof, basically modified atoi, does not work with
1.0e4 but could be made to.
unsigned char IsFDigit(char c)
{
return (c <= '+') || (c <= '9' && c >= '0') ||
(c == '.') || (c == '-');
}
float stof(register char *s, uint8_t base)
{
uint8_t sign;
char c;
unsigned dec;
float v;
sign = 0;
v = 0;
dec = 1;
c = '\0';
while(isspace(*s)) s++;
switch (*s)
{
case '-': sign++;
s++;
break;
case '+': s++;
break;
case '0': s++; /* we can ignore any leading zero's */
if ((*s) == 'x')
{
base = 16;
s++;
}
}
while(IsFDigit(c = *s++))
{
c = tolower(c);
if (c == '.')
{
base = 1;
dec = 10;
}
else
{
if(isdigit(c)) c -= '0';
else c -= 'a' - (char)10;
v = v * (float)base;
v = v + (float)c/dec;
if (dec >= 10) dec = dec * 10;
}
}
if (sign != 0) return -v;
return v;
}
--
Peter Jansen
STS
Australian Antarctic Division
___________________________________________________________________________
Australian Antarctic Division - Commonwealth of Australia
IMPORTANT: This transmission is intended for the addressee only. If you are not
the
intended recipient, you are notified that use or dissemination of this
communication is
strictly prohibited by Commonwealth law. If you have received this transmission
in error,
please notify the sender immediately by e-mail or by telephoning +61 3 6232
3209 and
DELETE the message.
Visit our web site at http://www.aad.gov.au/
___________________________________________________________________________