我正在寻找一种将非常大的字符数组转换为整数的方法。作为参考,我需要能够将包含数字的字符数组转换为:
1718944270642558716715
到整数值。
请问我该如何完成? 我试过使用
atoi()
但它返回-1。
我也尝试使用 atol()
, strtoul()
, strtoumax()
都没有运气。
注意:我的代码是用
-std=gnu89
确认,这样就排除了long long类型的问题。非常感谢您的帮助。
提前致谢。
如果你使用 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);
}