#include <iostream>
uint8_t hexCharToNumber( char c )
{
uint8_t number = UINT8_MAX;
if ( c >= '0' && c <= '9' ) number = c - '0';
else if ( c >= 'a' && c <= 'f' ) number = c - 'a' + 10;
else if ( c >= 'A' && c <= 'F' ) number = c - 'A' + 10;
return number;
}
int main()
{
const char * s = "65D0F7758B094114AFA6D33A5EA0716A";
const char * p = s;
uint8_t array[16];
uint8_t index = 0;
bool error = false;
while ( *p != '\0' )
{
char c1 = *p++;
char c2 = *p++;
if ( c2 == '\0' || index == 16 )
{
error = true;
break;
}
array[ index++ ] = ( hexCharToNumber( c1 ) << 4 ) | hexCharToNumber( c2 );
}
if ( error == true || index < 16 )
{
printf( "error\n" );
}
else
{
for (uint8_t i = 0; i < index; ++i )
{
printf( "%02X\n", array[i] );
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnVpbnQ4X3QgaGV4Q2hhclRvTnVtYmVyKCBjaGFyIGMgKQp7Cgl1aW50OF90IG51bWJlciA9IFVJTlQ4X01BWDsKIAogICAgaWYgICAgICAoIGMgPj0gJzAnICYmIGMgPD0gJzknICkgbnVtYmVyID0gYyAtICcwJzsKICAgIGVsc2UgaWYgKCBjID49ICdhJyAmJiBjIDw9ICdmJyApIG51bWJlciA9IGMgLSAnYScgKyAxMDsKICAgIGVsc2UgaWYgKCBjID49ICdBJyAmJiBjIDw9ICdGJyApIG51bWJlciA9IGMgLSAnQScgKyAxMDsKIAogICAgcmV0dXJuIG51bWJlcjsKfQogCmludCBtYWluKCkKewoJY29uc3QgY2hhciAqIHMgPSAiNjVEMEY3NzU4QjA5NDExNEFGQTZEMzNBNUVBMDcxNkEiOwoJY29uc3QgY2hhciAqIHAgPSBzOwoJCgl1aW50OF90IGFycmF5WzE2XTsKCXVpbnQ4X3QgaW5kZXggPSAwOwoJYm9vbCBlcnJvciA9IGZhbHNlOwoJCgl3aGlsZSAoICpwICE9ICdcMCcgKQoJewoJCWNoYXIgYzEgPSAqcCsrOwoJCWNoYXIgYzIgPSAqcCsrOwoKCQlpZiAoIGMyID09ICdcMCcgfHwgaW5kZXggPT0gMTYgKQoJCXsKCQkJZXJyb3IgPSB0cnVlOwoJCQlicmVhazsKCQl9CgkJCgkJYXJyYXlbIGluZGV4KysgXSA9ICggaGV4Q2hhclRvTnVtYmVyKCBjMSApIDw8IDQgKSB8IGhleENoYXJUb051bWJlciggYzIgKTsKCX0KCQoJaWYgKCBlcnJvciA9PSB0cnVlIHx8IGluZGV4IDwgMTYgKQoJewoJCXByaW50ZiggImVycm9yXG4iICk7Cgl9CgllbHNlCgl7CgkJZm9yICh1aW50OF90IGkgPSAwOyBpIDwgaW5kZXg7ICsraSApCgkJewoJCQlwcmludGYoICIlMDJYXG4iLCBhcnJheVtpXSApOwoJCX0KCX0KCQoJcmV0dXJuIDA7Cn0=