10进制和16进制 数字和ASCII码互转

10进制和16进制数转ASCII码

int hex2ascii(unsigned char *hex, int hex_len, char *text)
{
    char buffer[20];
    int cnt=0;

    for(cnt = 0; cnt < hex_len; cnt++)
    {
    memset(buffer, 0, 20);
    sprintf(buffer, "%02X", hex[cnt]);
    strcat(text, buffer);
    }

    return hex_len;
}

int dec2ascii(unsigned char *dec, int dec_len, char *text)
{
    char buffer[30];
    int cnt=0;

    for(cnt = 0; cnt < dec_len; cnt++)
    {
    memset(buffer, 0, 30);
    sprintf(buffer, "%02d", dec[cnt]);
    strcat(text, buffer);
    }

    return dec_len;
}

16进制Ascii转16进制数组

参考

/*
函数名称:AsciiStrToHexArray
功能:把ASCII码的字符串转为数字的16进制
参数dst:存储16进制数组数据指针
参数src:存储ASCII码的字符串指针
返回值:16进制的数组数据长度
*/
 
 //把字符串转为16进制数
 //例如: 把"1234567890abcdef" 转成12 34 56 78 90 ab cd ef
int16_t AsciiStrToHexArray(uint8_t*dst,uint8_t*src)
{
   uint8_t ch;
   uint16_t index=0;
 
    if(strlen(src) == NULL)
    {
       return -1;
    }
 
    if(strlen(src)%2 == 0)//ASCII字符串偶数长度
    {
       for(index = 0;index < strlen(src);index++)
       {
           if((src[index]>='0')&&(src[index]<='9'))//数字0-9范围
           {
              ch = src[index]-0x30;
           }
           else if((src[index]>='A')&&(src[index]<='F'))//大写字母A-F范围
           {
              ch = src[index]-0x37;
           }
           else if((src[index]>='a')&&(src[index]<='f'))//小写字母,a-f范围
           {
              ch = src[index]-0x57;
           }else{
 
              return -1;
 
          } 
           if(index%2 != 0)//下标从0开始,取余数不为0则是偶数长度的数据
           {
              dst[index/2]=dst[index/2]|ch;
            }else{
              dst[index/2]=ch<<4;
            }
       }
       return (index / 2);//整除,把除数作为16进制数组长度返回
    }else{//ASCII字符串奇数长度
       for(index = 0;index < strlen(src);index++)
       {
            if((src[index]>='0')&&(src[index]<='9'))//数字0-9范围
            {
              ch = src[index]-0x30;
            }
            else if((src[index]>='A')&&(src[index]<='F'))//大写字母A-F范围
            {
              ch = src[index]-0x37;
            }else if((src[index]>='a')&&(src[index]<='f'))//小写字母,a-f范围
            {
              ch = src[index]-0x57;
            }
 
            else{
 
              return -1;
 
            } 
 
            if((index+1) == strlen(src))//奇数时,最后单独一个字符转为16进制后存储缓存
            {
               dst[index/2] = ch;
            }else{//不是最后一个字符
                if(index%2 != 0)//下标从0开始,取余数不为0则是偶数长度的数据
                {
                  dst[index/2]=dst[index/2]|ch;
                }else{
                  dst[index/2]=ch<<4;
                }
            }
       }
       return (index / 2+1);//不整除,把除数加1作为16进制数组长度返回
    }
}

版权声明:本文为qq_32348883原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。