我正在使用strtoll函数将字符串转换为长整数。 当输入字符串为63 char时,我没有遇到任何问题。
但当它超过63个字符时给我错误的结果。
char *pEnd1;
long long ll_i1 = 0;
ll_i1 = strtoll (newDE1, &pEnd1, 2);
作品==> newDE1 =“11111011011101101 ................”63个字符。 不工作==> newDE1 =“11111011011101101 ................”64个字符。 是否有任何内置函数可以实现。
答案 0 :(得分:1)
strtol()函数返回转换结果,除非 值会下溢或溢出。如果发生下溢,strtol() 返回LONG_MIN。 如果发生溢出,strtol()将返回LONG_MAX。 在这两种情况下,errno都设置为ERANGE。正好相同 strtoll()(使用LLONG_MIN和LLONG_MAX而不是LONG_MIN和 LONG_MAX)。
鉴于您已发布尝试转换超过63个字符的字符串,您可能会出现溢出。
答案 1 :(得分:0)
stroll()
将设置正确的errno(ERANGE),如果值下溢则提供llong_min
,如果溢出则提供llong_max
,这正是您通过传递引起的超过63个字符。
答案 2 :(得分:0)
OP long long
无法将64 - char
字符串表示为正整数,因为值溢出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);