#include <inttypes.h>
typedef unsigned char byte;
int64_t Int64FromHex(char* data)
{
int64_t value;
byte i, j, k;
byte n = 7;
for (i = 2; i < 17; i += 2)
{
j = i - 2;
k = i - 1;
byte a, b;
if (data[j] >= '0' && data[j] <= '9')
{
a = data[j] - 48; // data[j] - '0'
}
else if (data[j] >= 'A' && data[j] <= 'F')
{
a = data[j] - 55; // data[j] - 'A' + 10
}
else if (data[j] >= 'a' && data[j] <= 'f')
{
a = data[j] - 87; // data[j] - 'a' + 10
}
else
{
a = 0;
}
if (data[k] >= '0' && data[k] <= '9')
{
b = data[k] - 48; // data[j] - '0'
}
else if (data[k] >= 'A' && data[k] <= 'F')
{
b = data[k] - 55; // data[j] - 'A' + 10
}
else if (data[k] >= 'a' && data[k] <= 'f')
{
b = data[k] - 87; // data[j] - 'a' + 10
}
else
{
b = 0;
}
((char*)(&value))[n] = (a * 16) + b;
--n;
}
return value;
}