2011-08-09 4 views
2

저는 iPhone 앱을 만들고 있습니다. 문자열에서 일련의 숫자를 파싱하고 싶습니다. 그러나 intValue는 정말 이상하게 행동합니다.iPhone int 파싱

내가 값을 문자열 1304287200000.

내가 다음은 An NSInteger에 그있는 intValue, 보라를 놓고 보라가 내 정수는 2147483647

의 값을 할당 어떤 이유로 무엇 준다?

+0

더 큰 정수를 사용 해보십시오.) – Jacob

답변

4

데이터 유형 int은 약 ± 20 억의 범위와, 32 비트 숫자 값입니다. 1304287200000은 해당 범위를 벗어난 여백 옆에 있습니다.

long long의 경우 int을 건너 뛰고 64 비트 유형이며 사용자의 필요를 충족해야합니다. 64 비트 유형의 사람이 읽을 수 있고 명시적인 이름은 int64_t입니다.

+0

감사합니다. 그 중 하나를 알아 냈어야합니다.). 즐거운 하루 되시 고 기여한 모든 분들께 감사드립니다! –

1

귀하의 수를 초과하는 정수 제한

2

int은 32 비트이므로 저장할 수있는 최대 값은 2,147,483,647입니다. 대신 longLongValue을 시도하십시오.

+0

'-intValue'는'NSInteger'하지만'int'를 반환하지 않습니다. 'NSInteger'와'int'는 같은 비트 크기가 될 수 있습니다. (실제로 iOS에서도 마찬가지입니다) 모든 플랫폼에있을 필요는 없습니다. – gcbrueckmann

+0

매우 흥미 롭습니다. 내 대답을 업데이트했습니다. 감사! –

4

파싱 된 값이 int 유형을 오버플로하기 때문에 되돌아 오는 것은 INT32_MAX입니다. 이 내용은 NSString documentation에 설명되어 있습니다. 대신 longLongValue을 시도하십시오. LLONG_MAX은 충분히 커야합니다.