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进制数组长度返回
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路过的大熊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值
>