#include <iostream>
//using namespace std;
unsigned long s = 0x006600; // Green
unsigned long t = 0x000066; // Blue ?
unsigned long f = 0x000000; // Off
void parseData( char const * const data )
{
// try get a decimal number at the start of data
char * p;
uint8_t number = (uint8_t)strtoul( data, &p, 10 );
// if strtoul couldn't find a number at the start of data
if ( p == data )
{
printf( "couldn't find a number!\n" );
return;
}
// else, p is now pointing at the character after the number
// so try increase p until the pointed character is a lowercase letter
// (to skip spaces and anything else)
while ( *p && ( *p < 'a' || *p > 'z' ) )
{
p++;
}
char letter = *p;
// if a lowercase letter wasn't found
if ( !letter )
{
printf( "couldn't find a letter!\n" );
return;
}
// else, the command is valid, a number and a lowercase letter have been found
printf( "number = %hhu, letter = %c\n", number, letter );
unsigned long color;
switch ( letter )
{
case 's' :
{
color = s;
break;
}
case 't' :
{
color = t;
break;
}
default :
{
color = f;
break;
}
}
printf( "color = 0x%06X\n", color );
}
int main()
{
char command[] = "10 t";
parseData( command );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgovL3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1bnNpZ25lZCBsb25nIHMgPSAweDAwNjYwMDsgLy8gR3JlZW4KdW5zaWduZWQgbG9uZyB0ID0gMHgwMDAwNjY7IC8vIEJsdWUgPwp1bnNpZ25lZCBsb25nIGYgPSAweDAwMDAwMDsgLy8gT2ZmCgp2b2lkIHBhcnNlRGF0YSggY2hhciBjb25zdCAqIGNvbnN0IGRhdGEgKQp7CiAgICAvLyB0cnkgZ2V0IGEgZGVjaW1hbCBudW1iZXIgYXQgdGhlIHN0YXJ0IG9mIGRhdGEKICAgIGNoYXIgKiBwOwogICAgdWludDhfdCBudW1iZXIgPSAodWludDhfdClzdHJ0b3VsKCBkYXRhLCAmcCwgMTAgKTsKICAgIAogICAgLy8gaWYgc3RydG91bCBjb3VsZG4ndCBmaW5kIGEgbnVtYmVyIGF0IHRoZSBzdGFydCBvZiBkYXRhCiAgICBpZiAoIHAgPT0gZGF0YSApCiAgICB7CiAgICAJcHJpbnRmKCAiY291bGRuJ3QgZmluZCBhIG51bWJlciFcbiIgKTsKICAgIAlyZXR1cm47CiAgICB9CiAgICAKICAgIC8vIGVsc2UsIHAgaXMgbm93IHBvaW50aW5nIGF0IHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIG51bWJlcgogICAgCiAgICAvLyBzbyB0cnkgaW5jcmVhc2UgcCB1bnRpbCB0aGUgcG9pbnRlZCBjaGFyYWN0ZXIgaXMgYSBsb3dlcmNhc2UgbGV0dGVyCiAgICAvLyAodG8gc2tpcCBzcGFjZXMgYW5kIGFueXRoaW5nIGVsc2UpCiAgICB3aGlsZSAoICpwICYmICggKnAgPCAnYScgfHwgKnAgPiAneicgKSApCiAgICB7CiAgICAJcCsrOwogICAgfQoKICAgIGNoYXIgbGV0dGVyID0gKnA7CiAgICAKICAgIC8vIGlmIGEgbG93ZXJjYXNlIGxldHRlciB3YXNuJ3QgZm91bmQKICAgIGlmICggIWxldHRlciApCiAgICB7CiAgICAJcHJpbnRmKCAiY291bGRuJ3QgZmluZCBhIGxldHRlciFcbiIgKTsKICAgIAlyZXR1cm47CiAgICB9CiAgICAKICAgIC8vIGVsc2UsIHRoZSBjb21tYW5kIGlzIHZhbGlkLCBhIG51bWJlciBhbmQgYSBsb3dlcmNhc2UgbGV0dGVyIGhhdmUgYmVlbiBmb3VuZAogICAgCiAgICBwcmludGYoICJudW1iZXIgPSAlaGh1LCBsZXR0ZXIgPSAlY1xuIiwgbnVtYmVyLCBsZXR0ZXIgKTsKICAgIAogICAgdW5zaWduZWQgbG9uZyBjb2xvcjsKICAgIHN3aXRjaCAoIGxldHRlciApCiAgICB7CiAgICAJY2FzZSAncycgOgogICAgCXsKICAgIAkJY29sb3IgPSBzOwogICAgCQlicmVhazsKICAgIAl9CiAgICAJY2FzZSAndCcgOgogICAgCXsKICAgIAkJY29sb3IgPSB0OwogICAgCQlicmVhazsKICAgIAl9CiAgICAJZGVmYXVsdCA6CiAgICAJewogICAgCQljb2xvciA9IGY7CiAgICAJCWJyZWFrOwogICAgCX0KICAgIH0KICAgIAogICAgcHJpbnRmKCAiY29sb3IgPSAweCUwNlhcbiIsIGNvbG9yICk7Cn0KCgppbnQgbWFpbigpCnsKCWNoYXIgY29tbWFuZFtdID0gIjEwIHQiOwoJcGFyc2VEYXRhKCBjb21tYW5kICk7CgkKCXJldHVybiAwOwp9