【嵌入式C】hex字符串转换成hex数组

1.将hex字符串转换成hex数组

uint8_t StringToHex(char *str, unsigned char *out, unsigned int *outlen)
{
  char *p = str;
  char high = 0, low = 0;
  uint8_t tmplen = strlen(p), cnt = 0;
  tmplen = strlen(p);
  while(cnt < (tmplen / 2))
  {
      high = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;
      low = (*(++ p) > '9' && ((*p <= 'F') || (*p <= 'f'))) ? *(p) - 48 - 7 : *(p) - 48;
       out[cnt] = ((high & 0x0f) << 4 | (low & 0x0f));
      p ++;
      cnt ++;
  }
  if(tmplen % 2 != 0) out[cnt] = ((*p > '9') && ((*p <= 'F') || (*p <= 'f'))) ? *p - 48 - 7 : *p - 48;

  if(outlen != NULL) *outlen = tmplen / 2 + tmplen % 2;
  return tmplen / 2 + tmplen % 2;
}

使用方式:

uint8_t *sendMsg;
uint8_t recv_len = 0;
char * bodyUploadInfoString = "03CC0503CC0503CC0503CC0503CC05";
sendMsg = malloc(sizeof(bodyUploadInfoString)/2);
StringToHex(bodyUploadInfoString, sendMsg, &recv_len);

2.十六进制与ACSII码互转

把ASCII字符转换为16进制

//功能描述:把ASCII字符转换为16进制 
uint8_t CharToHex(uint8_t  bHex)
{
    if((bHex>=0)&&(bHex<=9))
    {
        bHex += 0x30;
    }
    else if((bHex>=10)&&(bHex<=15))//Capital
    {
        bHex += 0x37;
    }
    else 
    {
        bHex = 0xff;
    }
    return bHex;
}

把16进制转换为ASCII字符

//功能描述:把16进制转换为ASCII字符 
uint8_t  HexToChar(uint8_t  bChar)
{
    if((bChar>=0x30)&&(bChar<=0x39))
    {
        bChar -= 0x30;
    }
    else if((bChar>=0x41)&&(bChar<=0x46)) // Capital
    {
        bChar -= 0x37;
    }
    else if((bChar>=0x61)&&(bChar<=0x66)) //littlecase
    {
        bChar -= 0x57;
    }
   else 
    {
        bChar = 0xff;
    }
   return bChar;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容