添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
很拉风的酱牛肉  ·  No such file or ...·  3 周前    · 
风流的松树  ·  群晖 或 NAS ...·  1 月前    · 

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

通过查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就可以得到当前字符的十六进制了,字母的转换也是如此,这里就不多说了。

版权声明:本文为博主原创文章,未经博主允许不得转载。通过查ASCII表知道:'a'对应的十六进制是是0x61,'A'对应的十六进制是0x41,'f'对应的十六进制是是0x66,'F'对应的十六进制是0x46,'0'对应的十六进制是是0x30,'9'对应的十六进制是0x39,其实这里的十六进制就是由字符对应的ASCII码转换得来的,下面主要讲下如何将数字0~9和26个英文字母转换成十六进制并存到... 记--C语言实现 文本形式的字符串十六进制字符串的相互换。如"01" <==> "3031" 有的数据包含不可见字符,直接打印出来会不可见或残缺,需要换为十六进制直接看ASCII码值。 二、测试代码 #include <stdio.h> #include <string.h>... #define MAX_DATA_SIZE 1024 static int convert_string2hex(unsigned char *in_data, int in_data_len, unsigned char *out_data, int *out_data_len) // parameter(s): [OUT] pbDest - 输出缓冲区 // [IN] pbSrc - 字符串 // [IN] nLen - 16进制数的字节数(字符串的长度/2) // remarks : 将字符串化为16进制数 void str_to_hex(char *pbDest, char*pbSrc, int nLen) char h1,h2; char s1,s2; int i; for (i=0; i<nLen; i+... 先使用strtol函数将字符串成十进制数,再通过sprintf函数将十进制数按十六进制字符串形式输出到字符数组保存 该方案弊端:换的数不能大于0x7FFFFFFF,因为strtol的返回值是long型 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(void char cArr[20] = “a1b2c3d4e5f6”; //字符个数双数,小写 char cBrr[6] = {0xa1, 0xb2, 0xc3, 0xd4, 0xe5, 0xf6}; 调用函数,参数1传入cArr, 参数2传入cBrr unsigned int persist_ssl_hashKeyConvert(char *pUserInput, char *pKeyArra... 写一个关于ASCII与十六进制换的函数实现吧,年纪大了,记性不好,有时候总是得翻一翻看看怎么实现的,现在记一下,以后好找。如有什么不足,大家可以提意见,相互学习,进步。 与其说是记不住,其实还是自己没有理解透彻ASCII与十六进制之间的关系,所以在写函数实现的时候,不知道如何下手,下表是ASCII与十六进制的对照表,可以好好记记,记住了,以后代码实现就信手拈来了 // C prototype : void StrToHex(BYTE *pbDest, BYTE *pbSrc, int nLen) // parameter(s): [OUT] pbDest - 输出缓冲区 // [IN] pbSrc - 字符串 // [IN] nLen - 16进
假设有一个十六进制字符串,“99AD1B5226A37E3E058E3B8E27C2C666”,如何把它按照字节来切分,然后成整型?也就是说换成 0x99, 0xAD, 0x1B, … C 语言参考代码: #include <stdio.h> #include <stdlib.h> #include <string.h> char *key = "99AD1B5226A37E3E058E3B8E27C2C666"; void main(void) sscanf(hexString, "%x", &decimal); // 将十六进制字符串换为十进制数 printf("Decimal: %d\n", decimal); // 打印换后的十进制数 return 0; 在上面的示例中,我们使用了sscanf函数将十六进制字符串换为十进制数。"%x"是sscanf函数的格式字符串,它告诉函数将输入解析为十六进制数并存储在decimal变量中。 运行上面的代码,输出将是: Decimal: 31 这里的31是将十六进制数"1F"换为十进制的结果。你可以根据需要修改hexString数组的值来进行不同的换。