String input = "AA BB CC DDAABBCCDD";
byte data[100];
size_t dataIndex = 0;
void setup()
{
Serial.begin(115200);
delay(200);
convert(input);
for (size_t i = 0; i < dataIndex; i++)
{
Serial.print(data[i], HEX);
Serial.print(' ');
}
Serial.println();
}
void convert(String hexstring)
{
int length = hexstring.length();
size_t digitCount = 0;
for (int i = 0; i < length; i++)
{
char digit = hexstring[i];
byte nybble = 99;
if (digit >= '0' && digit <= '9')
{
nybble = digit - '0';
}
else if (digit >= 'A' && digit <= 'F')
{
nybble = digit - 'A' + 10;
}
else if (digit >= 'a' && digit <= 'f')
{
nybble = digit - 'a' + 10;
}
else
nybble = 99;
if (nybble == 99)
{
// Non-digit
if (digitCount > 0)
{
// There was one digit in this byte already
dataIndex++;
data[dataIndex] = 0;
digitCount = 0;
}
}
else
{
// Hex Digit
data[dataIndex] <<= 4; // Make room for a new low digit
data[dataIndex] += nybble;
digitCount++;
if (digitCount == 2)
{
// This byte is full
dataIndex++;
data[dataIndex] = 0;
digitCount = 0;
}
}
}
}
void loop() {}