#include <stdio.h>
#define ASCII_0_VALU 48
#define ASCII_9_VALU 57
#define ASCII_A_VALU 65
#define ASCII_F_VALU 70
unsigned int HexStringToUInt(char const* hexstring)
{
unsigned int result = 0;
char const *c = hexstring;
char thisC;
while( (thisC = *c) != NULL )
{
unsigned int add;
result <<= 4;
if( thisC >= ASCII_0_VALU && thisC <= ASCII_9_VALU )
add = thisC - ASCII_0_VALU;
else if( thisC >= ASCII_A_VALU && thisC <= ASCII_F_VALU)
add = thisC - ASCII_A_VALU + 10;
else
{
printf("Unrecognised hex character \"%c\"\n", thisC
); }
result += add;
++c;
}
return result;
}
int main(void)
{
printf("\nANSWER(\"12FF\"): %d\n", HexStringToUInt
("12FF")); printf("\nANSWER(\"abcd\"): %d\n", HexStringToUInt
("abcd"));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIEFTQ0lJXzBfVkFMVSA0OAojZGVmaW5lIEFTQ0lJXzlfVkFMVSA1NwojZGVmaW5lIEFTQ0lJX0FfVkFMVSA2NQojZGVmaW5lIEFTQ0lJX0ZfVkFMVSA3MAoKdW5zaWduZWQgaW50IEhleFN0cmluZ1RvVUludChjaGFyIGNvbnN0KiBoZXhzdHJpbmcpCnsKCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwoJY2hhciBjb25zdCAqYyA9IGhleHN0cmluZzsKCWNoYXIgdGhpc0M7CgkKCXdoaWxlKCAodGhpc0MgPSAqYykgIT0gTlVMTCApCgl7CgkJdW5zaWduZWQgaW50IGFkZDsKCQl0aGlzQyA9IHRvdXBwZXIodGhpc0MpOwoJCQoJCXJlc3VsdCA8PD0gNDsKCQkKCQlpZiggdGhpc0MgPj0gQVNDSUlfMF9WQUxVICYmICB0aGlzQyA8PSBBU0NJSV85X1ZBTFUgKQoJCQlhZGQgPSB0aGlzQyAtIEFTQ0lJXzBfVkFMVTsKCQllbHNlIGlmKCB0aGlzQyA+PSBBU0NJSV9BX1ZBTFUgJiYgdGhpc0MgPD0gQVNDSUlfRl9WQUxVKQoJCQlhZGQgPSB0aGlzQyAtIEFTQ0lJX0FfVkFMVSArIDEwOwoJCWVsc2UKCQl7CgkJCXByaW50ZigiVW5yZWNvZ25pc2VkIGhleCBjaGFyYWN0ZXIgXCIlY1wiXG4iLCB0aGlzQyk7CgkJCWV4aXQoLTEpOwoJCX0KCQkKCQlyZXN1bHQgKz0gYWRkOwoJCSsrYzsKCX0KCglyZXR1cm4gcmVzdWx0OwkKfQoKaW50IG1haW4odm9pZCkgCnsKCXByaW50ZigiXG5BTlNXRVIoXCIxMkZGXCIpOiAlZFxuIiwgSGV4U3RyaW5nVG9VSW50KCIxMkZGIikpOwoJcHJpbnRmKCJcbkFOU1dFUihcImFiY2RcIik6ICVkXG4iLCBIZXhTdHJpbmdUb1VJbnQoImFiY2QiKSk7CgkKCXJldHVybiAwOwp9Cg==