C 中大字符数组到整数的转换

问题描述 投票:0回答:1

我正在寻找一种将非常大的字符数组转换为整数的方法。作为参考,我需要能够将包含数字的字符数组转换为:

1718944270642558716715
到整数值。

请问我该如何完成? 我试过使用

atoi()
但它返回-1。 我也尝试使用
atol()
,
strtoul()
,
strtoumax()
都没有运气。

注意:我的代码是用

-std=gnu89
确认,这样就排除了long long类型的问题。非常感谢您的帮助。

提前致谢。

c types type-conversion large-data
1个回答
1
投票

如果你使用 gcc,你可以使用

__int128
类型。但是你需要自己编写大部分功能。

使用您的号码的示例:

__int128 atoi128(const char *str, int *err)
{
    __int128 result = 0;

    if(err) *err = 0;
    while(*str)
    {
        if(isdigit((unsigned char)*str)) 
        {
            result *= 10;
            result += *str - '0';
            str++;
        }
        else
        {
            if(err) *err = 1;
            break;
        }
    }
    return result;
}

void printi128(__int128 val)
{
    if(val < 10) printf("%d", val);
    else 
    {
        printi128(val / 10);
        printf("%d", abs(val % 10));
    }
}

int main(void)
{
    __int128 i;

    i = atoi128("9223372036854775807", NULL);
    printi128(i);
}

https://godbolt.org/z/znPde51jK

© www.soinside.com 2019 - 2024. All rights reserved.