我正在尝试使用stringstream将字符串转换为int,下面的代码可以正常工作,但是如果我使用的数字更多 1234567890 ,例如 12345678901 那么它返回 0 返回...我不知道如何解决这个问题,请帮帮我
std:: string number= "1234567890";
int Result;//number which will contain the result
std::stringstream convert(number.c_str()); // stringstream used for the conversion initialized with the contents of Text
if ( !(convert >> Result) )//give the value to Result using the characters in the string
Result = 0;
printf ("%d\n", Result);
答案 0 :(得分:2)
int可以包含的最大数量略多于20亿。 (假设ubiquitios 32位整数)
它只是不适合int!
答案 1 :(得分:2)
最大的unsigned int(在32位平台上)是2 ^ 32(4294967296),你的输入大于那个,所以它放弃了。我猜你可以从某种程度上得到它的错误代码。也许检查failbit
或badbit
?
int Result;
std::stringstream convert(number.c_str());
convert >> Result;
if(convert.fail()) {
std::cout << "Bad things happened";
}
答案 2 :(得分:2)
如果您使用的是32位或LP64 64位系统,则int为32位,因此您可以存储的最大数量约为20亿。请尝试使用长或长,并将“%d”更改为“%ld”或“%lld”。
答案 3 :(得分:1)
有符号int的(通常)最大值是2.147.483.647,因为它(通常)是32位整数,所以对于更大的数字它会失败。
如果您将int Result;
替换为long Result;
,它应该适用于更大的数字,但仍有限制。您可以使用unsigned
整数类型将该限制扩展到因子2,但前提是您不需要负数。
答案 4 :(得分:0)
嗯,在现有的四到五个答案中有很多错误信息。
int
至少为16位,对于常见的桌面系统编译器,它通常为32位(在所有Windows版本中)或64位。对于32位,它具有最大2 32 不同的值,设置K = 2 10 = 1024,是4·K 3 ,即大致40亿。您最近的计算器或Python提示符可以告诉您确切的值。
long
至少为32位,但这对当前问题没有帮助,因为在所有现存的Windows变体中,包括64位Windows,long
是32位......
因此,要获得比int
更好的范围,请使用 long long
。它至少是64位,实际上,截至2012年,所有编译器都是64位。或者,只使用double
,虽然不是整数类型,但最常见的实现(IEEE 754 64位)可以完全表示整数值,我记得,大约51或52位 - 看看它如果你想要确切的位数,那就上来了。
无论如何,请记得检查转化失败的流,您可以s.fail()
或!s
执行此操作(相当于fail()
,更多确切地说,流明确转换为bool
会返回!fail()
)。