十六进制转字符串

// 两个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];
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐白001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值