2013-07-23 3 views
0

파일 크기를 NSNumber로 바이트 단위로 저장하려고합니다. NSURLResponse에서 파일 다운로드 크기를 읽는 중, 긴 값을 제공하고 그 값을 사용하여 NSNumber 개체를 만들고 저장합니다. 나중에 그 값을 검색하기 위해 갈 때, 모든 상위 바이트가 FFFFFFFF로 설정되어 돌아옵니다.Objective C - NSNumber longLongValue 저장 및 검색시 항상 접두사 0xFFFFFFFF가됩니다.

예를 들어, 크기를 2196772870 바이트 (0x82f01806)로 읽은 다음 NSNumber에 저장합니다. 다시 가져 오면 -2098194426 바이트 (0xffffffff82f01806)가됩니다. NSNumber에 값을 저장하기 전에 0x00000000FFFFFFFF와 이진 AND를 시도했지만 여전히 음수로 되돌아옵니다. 아래 코드 :

long long bytesTotal = response.expectedContentLength; 
NSLog(@"bytesTotal = %llx",bytesTotal); 
[downloadInfo setFileTotalSize:[NSNumber numberWithInt:bytesTotal]]; 
//[downloadInfo setFileTotalSize:[NSNumber numberWithLongLong:bytesTotal]]; 
long long fileTotalSize = [[downloadInfo fileTotalSize] longLongValue];   
NSLog(@"fileTotalSize = %llx",fileTotalSize); 

출력 :

bytesTotal = 82f01806 
fileTotalSize = ffffffff82f01806 

어떤 제안?

편집 : downloadInfo 개체의 설정을 완전히 잊어 버렸습니다.

+0

왜'size'를 (를) 만들 때'bytesTotal'을 마스크합니까? '크기'로 무엇을합니까? 'downloadInfo'는 어디에서 왔습니까? – rmaddy

+0

@maddy 내가 마스킹할지 말지는 똑같은 일을합니다. downloadInfo는 뷰의 전체 크기를 표시 할 수 있도록 파일 크기를 저장하는 객체입니다. – rplankenhorn

+0

게시 한 코드에는 큰 구멍이 있습니다. 'size' 변수 (당신은 로그하지 않습니다)에서'downloadInfo' 변수로 어떻게 갑니까? 엉망진창의 가치는 누락 된 세부 사항의 어딘가에서 발생합니다. – rmaddy

답변

1

문제는이 라인 :

[downloadInfo setFileTotalSize:[NSNumber numberWithInt:bytesTotal]]; 

bytesTotal 그것이 long long의, int하지 않습니다, 그래서 당신은, numberWithInt:numberWithLongLong:을하지 사용해야합니다. 원인 변환이 64 비트 확장 기호로 원인이되는

[downloadInfo setFileTotalSize:[NSNumber numberWithLongLong:bytesTotal]]; 

, 그 비트가 상위 긴 통해 모든 방법을 확장됩니다 있도록 8 개 나타납니다로 시작하는 번호는 음수로 :로 변경 그것은 ffffffff 수 있습니다.

+0

numberWithLongLong 또는 numberWithInt를 사용하는지 여부는 여전히 문제가 있습니다. – rplankenhorn