pow为幂函数。
char char_2_hex(char *src);是16进制字符转16进制int
此函数引用这位博主:具体实现方式可以自行了解http://t.csdnimg.cn/pGyQ2
int str_to_hex(char *str,int len);转化字符串的函数。
这个int返回值最高支持8位16进制转换,如果改为long数据类型,最高支持16位。理论8位够用了,新的代码验证了一下贴在下面,感兴趣的朋友只有复制到网页C语言编译器运行一下就能看见结果
#include <stdio.h>
#include <string.h>
long Pow(char x,char n)
{
long pow = x > 0 ? 1 : 0;
for (int i = 0; i < n; i++)
{
pow = pow * x;
}
return pow;
}
char char_2_hex(char *src)
{
char desc;
if((*src >= '0') && (*src <= '9'))
desc = *src - 0x30;
else if((*src >= 'a') && (*src <= 'f'))
desc = *src - 0x57;
else if((*src >= 'A') && (*src <= 'F'))
desc = *src - 0x37;
return desc;
}
/**
* @brief 字符串16进制数转long
* @param str字符串
* @param 转化长度(返回long类型最高支持16位16进制转换))
* @return hex返回long数
*/
long str_to_hex(char *str,int len)
{
long hex = 0;
char temp[len];
for(char i=0;i<len;i++)
{
temp[i]=char_2_hex(&str[len-i-1]);
hex =hex+temp[i]*Pow(16,i);
}
return hex;
}
int main(int argc, char **argv) {
char str[]="123456789ABDFFFF";
long s;
printf("strlen=%d\n",(int)strlen(str));
s = str_to_hex(str,strlen(str));
printf(" s=%lX\n",s);
}
#include <stdio.h>
int Pow(char x,char n)
{
int pow = x > 0 ? 1 : 0;
for (int i = 0; i < n; i++)
{
pow = pow * x;
}
return pow;
}
char char_2_hex(char *src)
{
char desc;
if((*src >= '0') && (*src <= '9'))
desc = *src - 0x30;
else if((*src >= 'a') && (*src <= 'f'))
desc = *src - 0x57;
else if((*src >= 'A') && (*src <= 'F'))
desc = *src - 0x37;
return desc;
}
/**
* @brief 字符串16进制数转int
* @param str字符串
* @param 转化长度
* @return hex返回int数
*/
int str_to_hex(char *str,int len)
{
int hex = 0;
char temp[len];
for(char i=0;i<len;i++)
{
temp[i]=char_2_hex(&str[len-i-1]);
hex =hex+temp[i]*Pow(16,i);
}
return hex;
}
int main(int argc, char **argv) {
char str[4]="ECDF";
int s;
s = str_to_hex(str,4);
printf(" s=%x\n",s);
}