通过查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}。
char str[20]={"123456"};
strlen(str);等于 6
sizeof(str); 等于20