C語言 16進位制字串轉16進位制數函數實現

2020-08-12 11:00:24
// 兩個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(_BYTE *HexStr, char *HexNum)
{
  _BYTE *tHexStr; // r7
  char *tHexNum; // r4
  signed int Count; // r6
  int HexResult; // r8
  char LowCaseCharacter; // r0
  char tCount; // r0

  tHexStr = HexStr;
  tHexNum = HexNum;
  Count = 0;
  HexResult = 0;
  while ( Count < strlen(HexStr)-1 && *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;
  }
}