char *hexToAscii (char *srcHex, int *destElements, int srcElements)
{
int index, destIndex;
unsigned char valUpper, valLower, *ascArray;
int lowerFlag;
lowerFlag = 0;
ascArray = NULL;
*destElements = srcElements/2;
ascArray = (char *)malloc (*destElements);
if (ascArray == NULL) {
return NULL;
}
for (destIndex = 0; destIndex < *destElements; destIndex++) {
// Every hex value will be 2 nibbles long and will take up 2 character
// space in the character array (Input)
for (index = 0; index < 2; index++) {
if (lowerFlag == 0) {
if (srcHex[(destIndex * 2) + index] >= '0' &&
srcHex[(destIndex * 2) + index] <= '9') {
valUpper = srcHex[(destIndex * 2) + index] - '0';
} else if (tolower (srcHex[(destIndex * 2) + index]) >= 'a' ||
tolower (srcHex[(destIndex * 2) + index]) <= 'f'){
valUpper = tolower(srcHex[(destIndex * 2) + index]) - 'a' + 10;
}
// The first character represent the upper nibble (upper 4 bits)
// of the hex value. Shift the converted value left 4 bits
valUpper <<= 4;
lowerFlag = 1;
} else {
if (srcHex[(destIndex * 2) + index] >= '0' &&
srcHex[(destIndex * 2) + index] <= '9') {
valLower = srcHex[(destIndex * 2) + index] - '0';
} else if (tolower (srcHex[(destIndex * 2) + index]) >= 'a' ||
tolower (srcHex[(destIndex * 2) + index]) <= 'f'){
valLower = tolower (srcHex[(destIndex * 2) + index]) - 'a' + 10;
}
lowerFlag = 0;
}
}
// ANDing upper and lower values will get the proper 8 bit ASCII converted val
ascArray[destIndex] = valUpper | valLower;
}
return ascArray;
}
{
int index, destIndex;
unsigned char valUpper, valLower, *ascArray;
int lowerFlag;
lowerFlag = 0;
ascArray = NULL;
*destElements = srcElements/2;
ascArray = (char *)malloc (*destElements);
if (ascArray == NULL) {
return NULL;
}
for (destIndex = 0; destIndex < *destElements; destIndex++) {
// Every hex value will be 2 nibbles long and will take up 2 character
// space in the character array (Input)
for (index = 0; index < 2; index++) {
if (lowerFlag == 0) {
if (srcHex[(destIndex * 2) + index] >= '0' &&
srcHex[(destIndex * 2) + index] <= '9') {
valUpper = srcHex[(destIndex * 2) + index] - '0';
} else if (tolower (srcHex[(destIndex * 2) + index]) >= 'a' ||
tolower (srcHex[(destIndex * 2) + index]) <= 'f'){
valUpper = tolower(srcHex[(destIndex * 2) + index]) - 'a' + 10;
}
// The first character represent the upper nibble (upper 4 bits)
// of the hex value. Shift the converted value left 4 bits
valUpper <<= 4;
lowerFlag = 1;
} else {
if (srcHex[(destIndex * 2) + index] >= '0' &&
srcHex[(destIndex * 2) + index] <= '9') {
valLower = srcHex[(destIndex * 2) + index] - '0';
} else if (tolower (srcHex[(destIndex * 2) + index]) >= 'a' ||
tolower (srcHex[(destIndex * 2) + index]) <= 'f'){
valLower = tolower (srcHex[(destIndex * 2) + index]) - 'a' + 10;
}
lowerFlag = 0;
}
}
// ANDing upper and lower values will get the proper 8 bit ASCII converted val
ascArray[destIndex] = valUpper | valLower;
}
return ascArray;
}