十六进制的字符串直接转成int类型

 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);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值