-1

我正在使用 strtoll 函数将字符串转换为长整数。当输入字符串为 63 字符时,我没有遇到任何问题。

但是当它超过 63 个字符时给我错误的结果。

char *pEnd1;
long long ll_i1 = 0;
ll_i1 = strtoll (newDE1, &pEnd1, 2);

有效 ==> newDE1 = "11111011011101101......." 63 个字符。不工作 ==> newDE1 = "11111011011101101......" 64 个字符。是否有任何内置功能要实现。

4

3 回答 3

1

根据strtoll手册页

strtol() 函数返回转换的结果,除非该值会下溢或溢出。如果发生下溢,strtol() 返回 LONG_MIN。 如果发生溢出,strtol() 返回 LONG_MAX。在这两种情况下,errno 都设置为 ERANGE。 strtoll() 也同样适用(使用 LLONG_MIN 和 LLONG_MAX 而不是 LONG_MIN 和 LONG_MAX)。

鉴于您已发布尝试转换超过 63 个字符的字符串,您可能会遇到溢出。

于 2015-11-02T13:09:08.047 回答
0

由于值溢出, OPlong long不能将 64char字符串表示为正整数LLONG_MAX

对于unsigned long long范围内的值,请使用:

// long long ll_i1 = 0;
// ll_i1 = strtoull (newDE1, &pEnd1, 2);
unsigned long long ull_i1;
ull_i1 = strtoull (newDE1, &pEnd1, 2);
于 2015-11-02T14:46:08.490 回答
0

stroll()将设置正确的 errno (ERANGE) 并提供llong_min值是否下溢或llong_max溢出,这正是您通过超过 63 个字符引起的。

于 2015-11-02T13:10:57.157 回答