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版权协议,转载请附上原文出处链接和本声明。