版权声明:本文为博主原创文章,未经博主允许不得转载。
通过查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数组的值来进行不同的转换。