Changing decToInt to numToInt (adds support for Hex number interpreter)

- CLI now works with hex or decimal numbers
- Hex requires 0x (technically just x would work too)
This commit is contained in:
Jacob Alexander 2014-08-16 12:07:25 -07:00
parent 662d1f557f
commit d6d792fdf9
10 changed files with 54 additions and 31 deletions

View file

@ -313,7 +313,7 @@ int16_t eqStr( char* str1, char* str2 )
return *--str1 == *--str2 ? -1 : *++str1;
}
int decToInt( char* in )
int numToInt( char* in )
{
// Pointers to the LSD (Least Significant Digit) and MSD
char* lsd = in;
@ -321,6 +321,7 @@ int decToInt( char* in )
int total = 0;
int sign = 1; // Default to positive
uint8_t base = 10; // Use base 10 by default TODO Add support for bases other than 10 and 16
// Scan the string once to determine the length
while ( *lsd != '\0' )
@ -335,12 +336,32 @@ int decToInt( char* in )
case ' ':
msd = lsd;
break;
case 'x': // Hex Mode
base = 0x10;
msd = lsd;
break;
}
}
// Rescan the string from the LSD to MSD to convert it to a decimal number
for ( unsigned int digit = 1; lsd > msd ; digit *= 10 )
total += ( (*--lsd) - '0' ) * digit;
// Process string depending on which base
switch ( base )
{
case 10: // Decimal
// Rescan the string from the LSD to MSD to convert it to a decimal number
for ( unsigned int digit = 1; lsd > msd ; digit *= 10 )
total += ( (*--lsd) - '0' ) * digit;
break;
case 0x10: // Hex
// Rescan the string from the LSD to MSD to convert it to a hexadecimal number
for ( unsigned int digit = 1; lsd > msd ; digit *= 0x10 )
{
if ( *--lsd <= '9' ) total += ( *lsd - '0' ) * digit;
else if ( *lsd <= 'F' ) total += ( *lsd - 'A' + 10 ) * digit;
else if ( *lsd <= 'f' ) total += ( *lsd - 'a' + 10 ) * digit;
}
break;
}
// Propagate sign and return
return total * sign;

View file

@ -114,7 +114,7 @@ void hex32ToStr_op( uint32_t in, char* out, uint8_t op );
void revsStr ( char* in );
uint16_t lenStr ( char* in );
int16_t eqStr ( char* str1, char* str2 ); // Returns -1 if identical, last character of str1 comparison (0 if str1 is like str2)
int decToInt ( char* in ); // Returns the int representation of a string
int numToInt ( char* in ); // Returns the int representation of a string
#endif