int myatoi(const char* str)
{
char flag = 1;
uint32_t data = 0;
while(*str == ' ')
{
str++;
}
if(*str == '-')
{
flag = -1;
str++;
}
else if(*str == '+')
{
str++;
}
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
data = 10 * data + *str - '0';
}
else
{
break;
}
str++;
}
return flag * data;
}
double myatof(const char* str)
{
uint8_t flag = 0;
double data = 0;
double decPow = 0.1;
while(*str == ' ')
{
str++;
}
switch(*str)
{
case '+':
str++;
break;
case '-':
flag = 1;
str++;
break;
case '.':
flag |= 0x80;
str++;
break;
default:
break;
}
while(*str != '\0')
{
if(*str >= '0' && *str <= '9')
{
if(flag & 0x80)
{
data += (*str - '0') * decPow;
decPow /= 10;
}
else
{
data = data * 10 + *str - '0';
}
}
else if(*str == '.')
{
if(flag & 0x80)
{
break;
}
flag |= 0x80;
}
else
{
break;
}
str++;
}
return flag & 0x7F ? -data : data;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
void test12(void)
{
char* str = " 456";
printf("A = %d\n", myatoi(str));
printf("B = %d\n", atoi(str));
}
void test13(void)
{
char* str = " +.1120/...00012";
printf("A = %f\n", myatof(str));
printf("B = %f\n", atof(str));
}
int main()
{
test12();
test13();
return 0;
}