首页
社区
课程
招聘
未解决 [求助]strtol 怎么转换更多
发表于: 2019-9-29 19:02 2056

未解决 [求助]strtol 怎么转换更多

2019-9-29 19:02
2056
strtol    最大只能转换7FFFFFFF
超过这个数值就转不了,
如果要把这个字符串 0x107A2615123A8  转成64位的应该怎么办?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 8452
活跃值: (5046)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
2
自己实现一个不就完了,网上符合你要求的代码多的是
改编自牛客网
#include<cstdio>
using namespace std;
int isAlpha(char num)
{
    return (num >= 'A' && num <= 'Z') || (num >= 'a' && num <= 'z');
}
 
int isDigit(char num)
{
    return num >= '0' && num <= '9';
}
 
char toLower(char num)
{
    char result = num;
    if (num >= 'A' && num <= 'Z')
        result += 32;
    return result;
}
long long strtoLL(const char *num_str, char **endptr, int base)
{
    long long result = 0;
    long long value;
    int tmpbase=0;
       if (*num_str == '0')
    {
        num_str++;
        if (*num_str == 'x' || *num_str == 'X')
        {
            tmpbase = 16;
            num_str++;
        }
        else
            tmpbase = 8;
    }
    else
        tmpbase = 10;
    if(base)tmpbase=base;
    while (true)
    {
        if (isAlpha(*num_str) || isDigit(*num_str))
        {
            value = isAlpha(*num_str) ? (toLower(*num_str) - 'a' + 10) : (*num_str - '0');
            if (value >= base)
                break;
            result = result * base + value;
            num_str++;
        }
        else
            break;
    }
    if (endptr)
        *endptr = const_cast<char*> (num_str);
    return result;
}
long long Mystrtol(const char *num_str, char **endptr, int base)
{
    if (*num_str == '-')
        return -1 * strtoLL(num_str + 1, endptr, base);
    else
               return strtoLL(num_str, endptr, base);
}
int main()
{
    char *str = "0x107A2615123A8";
    char *temp;
    long long result = Mystrtol(str, &temp,16);
    printf("%lld",result);
    return 0;
}
2019-9-29 20:08
0
雪    币: 12857
活跃值: (9172)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
sscanf"%I64X"
2019-9-29 20:23
0
游客
登录 | 注册 方可回帖
返回
//