파일 크기를 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 개체의 설정을 완전히 잊어 버렸습니다.
왜'size'를 (를) 만들 때'bytesTotal'을 마스크합니까? '크기'로 무엇을합니까? 'downloadInfo'는 어디에서 왔습니까? – rmaddy
@maddy 내가 마스킹할지 말지는 똑같은 일을합니다. downloadInfo는 뷰의 전체 크기를 표시 할 수 있도록 파일 크기를 저장하는 객체입니다. – rplankenhorn
게시 한 코드에는 큰 구멍이 있습니다. 'size' 변수 (당신은 로그하지 않습니다)에서'downloadInfo' 변수로 어떻게 갑니까? 엉망진창의 가치는 누락 된 세부 사항의 어딘가에서 발생합니다. – rmaddy