当char超过时,使用strtoll将字符串转换为长整数

时间:2015-11-02 13:03:47

标签: c string.h

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

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

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

作品==> newDE1 =“11111011011101101 ................”63个字符。 不工作==> newDE1 =“11111011011101101 ................”64个字符。 是否有任何内置函数可以实现。

3 个答案:

答案 0 :(得分:1)

根据strtoll man page

  

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);