ASCII字符和16进制字节数据互转

接着上次写的一个字符转换。这次是互转,更便于理解。

1.CharToHex()

//功能描述:把ASCII字符转换为16进制
将两个ASCII字符转化为单个字节进行显示,即两个字节转化为一个字节。如’E’ 'B’两个字符,转化为0xEB。

void CharToHex(unsigned char *GB, int glen, unsigned char* SB, int* slen)
{ 
    int i;    //遍历输入的字符串
	int a = 0;   
	char temp;   //接收字符,用来判断是否为空格,若是则跳过
	char temp1,temp2;   //接收一个字节的两个字符  例如EB,则temp1='E',temp2 = 'B'
	*slen = 0;  //输出的16进制字符串长度
	for(i=0;i<glen;i++)
	{
		temp = GB[i];
		if(temp==' ')
			continue;
 
		if(a == 0)
		   temp1 = GB[i];
		if(a == 1)
		   temp2 = GB[i];
		a++;
 
		if(a==2)
		{
          //第一个字符转换
         if((temp1>=0x30)&&(temp1<=0x39))  
               temp1 -= 0x30; 
         else if((temp1>=0x41)&&(temp1<=0x46))//大写字母 
               temp1 -= 0x37; 
         else if((temp1>=0x61)&&(temp1<=0x66))//小写字母 
               temp1 -= 0x57; 
         else temp1 = 0xff; 

		 //第二个字符转换
         if((temp2>=0x30)&&(temp2<=0x39))  
               temp2 -= 0x30; 
         else if((temp2>=0x41)&&(temp2<=0x46))//大写字母 
               temp2 -= 0x37; 
         else if((temp2>=0x61)&&(temp2<=0x66))//小写字母 
               temp2 -= 0x57; 
         else temp2 = 0xff; 

		  SB[*slen] = temp1*16+temp2;  //转成16进制字节数据
		   (*slen)++;
		}
	}
}

2.HexToChar()

//功能描述:把16进制转换为ASCII字符
将单个字节转化为两个ASCII字符进行显示,即一个字节转化为两个字节。如0xEB,转化为’E’ 'B’两个字符。

void  HexToChar(unsigned char *bHex,unsigned char *bchar,int* slen)
{
        *slen = 0;  //输出的字符串长度
        int blen=0;
        int v=0;
        int m=0;
        blen=strlen(*bHex);
        for(int i=0;i<blen:i++)
        {
            v = (bHex[i]) / 16;  //高位
	        m = (bHex[i]) % 16;  //低位
	        // 高位转char
            if((v>=0)&&(v<=9)) 
                  v += 0x30; 
            else if((v>=10)&&(v<=15))//大写字母 
                  v += 0x37; 
            else v = 0xff; 
            bchar[*slen] = (unsigned char)v;//ASCII转char类型v;
            (*slen)++;   
                  
            // 低位转char
            if((m>=0)&&(m<=9)) 
                  m += 0x30; 
            else if((m>=10)&&(m<=15))//大写字母 
                  m += 0x37; 
            else m = 0xff; 
             bchar[*slen] = (unsigned char) m;//ASCII转char类型m;
            (*slen)++; 
        }
}

代码没有测试过,只是看了网上的解释,结合自己的理解写的。

附上最全的ASCII码表:
在这里插入图片描述

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值