// 两个16进制的字符转成一个字节
int IsLowercase(signed int character)
{
int result;
result = character >= 'a' && character < '{';
return result;
}
int UpperCaseToLower(int Character)
{
if ( IsLowercase(Character) )
Character -= 32;
return Character;
}
//这里是固定传入偶数个字符的16进制字符
void StrToHex(uint8_t *HexStr, uint8_t *HexNum,int hexCount)
{
uint8_t *tHexStr; // r7
uint8_t *tHexNum; // r4
signed int Count; // r6
int HexResult; // r8
char LowCaseCharacter; // r0
char tCount; // r0
int i = hexCount;
tHexStr = HexStr;
tHexNum = HexNum;
Count = 0;
HexResult = 0;
while ( Count < i && *tHexStr )
{
LowCaseCharacter = UpperCaseToLower((char)*tHexStr++);
// 判断非数字
if ( LowCaseCharacter < 0x30 || LowCaseCharacter >= 0x3A ) {
if ( LowCaseCharacter < 'A' || LowCaseCharacter >= 'G' )// 如果不是A-F 之间的字符值 那就错误退出
{
//printf((int)"key must be in hexadecimal notation\n");
return;
}
HexResult = LowCaseCharacter + 16 * HexResult - 0x37;// 如果是A-F中的数
}else {
HexResult = LowCaseCharacter + 16 * HexResult - 0x30;// 如果是数字
}
tCount = Count++;
if ( tCount & 1 ) // 如果当前读的是奇数个 那么就不存储到数组中 如果是偶数个 才将两个一起存到数组中
tHexNum[Count / 2 - 1] = HexResult;
}
}
void HexToAscii(uint8_t *pHex, uint8_t *pAscii, int nLen)
{
unsigned char Nibble[2];
unsigned int i,j;
for (i = 0; i < nLen; i++){
Nibble[0] = (pHex[i] & 0xF0) >> 4;
Nibble[1] = pHex[i] & 0x0F;
for (j = 0; j < 2; j++){
if (Nibble[j] < 10){
Nibble[j] += 0x30;
}
else{
if (Nibble[j] < 16)
Nibble[j] = Nibble[j] - 10 + 'A';
}
*pAscii++ = Nibble[j];
}
}
}