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:
parent
662d1f557f
commit
d6d792fdf9
10 changed files with 54 additions and 31 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue