문제

긴 값을 int64에서 nsdata로 변환해야하므로 나중에 해시 알고리즘을 실행할 수 있습니다. 나는 공연 :

int64_t longNumber = 9000000000000000000L;
NSMutableData *buffer = [NSMutableData dataWithBytes:&longNumber length:sizeof(longNumber)];

NSLog(@"%lld", [buffer bytes]);
NSLog(@"%lld", longNumber);

결과 콘솔 출력은 다음과 같습니다.

6201314301187184 9000000000000000000

NSDATA가 긴 숫자의 값을 올바르게 저장하지 않는 이유는 무엇입니까? 이것을 루프로 실행하면 NSData는 620, 621 및 ON으로 시작하여 드리프트가 드리프트합니다. 값이 아닌 [버퍼 바이트]를 통해 Longnumber의 주소를 출력하고 있습니까?

도움이 되었습니까?

해결책

당신은 두 가지 주요 문제가 있습니다. 첫째, 당신의 숫자는 당신이 그것을 캐스팅하는 오랫동안 너무 커서 너무 큽니다. 대신에 9000000000000000000L 당신은 가져야합니다 9000000000000000000LL 긴 긴 상수를 나타냅니다.

둘째, 질문에 올바르게 대답했습니다. 주소를 인쇄하고 있습니다. NSLOG 라인을이 라인으로 교체하십시오.

NSLog(@"%lld", *((int64_t*)[buffer bytes]));

그리고 당신은 당신이 기대하는 결과를 볼 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top