C语言如何将字符串转十六进制

版权声明:本文为博主原创文章,未经博主允许不得转载。

通过查ASCII表知道:'a'对应的十六进制是是0x61,'A'对应的十六进制是0x41,'f'对应的十六进制是是0x66,'F'对应的十六进制是0x46,'0'对应的十六进制是是0x30,'9'对应的十六进制是0x39,其实这里的十六进制就是由字符对应的ASCII码转换得来的,下面主要讲下如何将数字0~9和26个英文字母转换成十六进制并存到数组中,直接贴代码分析。

void StringToHex(char *str, unsigned char *strhex)
{
	uint8_t i,cnt=0;
	char *p = str;             //直针p初始化为指向str
	uint8_t len = strlen(str); //获取字符串中的字符个数
	
	while(*p != '\0') {        //结束符判断
		for (i = 0; i < len; i ++)  //循环判断当前字符是数字还是小写字符还是大写字母
		{
			if ((*p >= '0') && (*p <= '9')) //当前字符为数字0~9时
				strhex[cnt] = *p - '0' + 0x30;//转为十六进制
			
			if ((*p >= 'A') && (*p <= 'Z')) //当前字符为大写字母A~Z时
				strhex[cnt] = *p - 'A' + 0x41;//转为十六进制
			
			if ((*p >= 'a') && (*p <= 'z')) //当前字符为小写字母a~z时
				strhex[cnt] = *p - 'a' + 0x61;  //转为十六进制
		
			p ++;    //指向下一个字符
			cnt ++;  
		}
	}
}

利用上述代码可得到以下转换结果:

当输入字符串str[] = {"123abcABC"} 时,输出srthex[9] = {0x31,0x32,0x33,0x61,0x62,0x63,0x41,0x42,0x43}。

最后说下转换为十六进制的计算:

数字转换:strhex[cnt] = *p - '0' + 0x30;先将当前的字符与'0'减运算得到两者之差,这里实际是字符的ASCII码相减,两者之差再加上起始字符'0'的十六进制0x30就可以得到当前字符的十六进制了,字母的转换也是如此,这里就不多说了。

 

  • 16
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值