2012-02-10 3 views
2

1393443048683555715와 같은 값을 16 진수로 변환해야합니다. 하지만, 우선 NSLog()를 사용하여 10 진수로 표시 할 수 없습니다.Objective-C에서 큰 숫자로 작업 하시겠습니까?

좋아, 그것은 작동 :

NSLog(@"%qu", 1393443048683555706); 

그러나 16 진수로 변환하는 방법에 대한. 이 큰 값을 저장하려면 어떤 유형을 사용해야합니까?

NSLog([NSString stringWithFormat: @"%x", 1393443048683555706]); 
// result eb854b7a. It's incorrect result! 

하지만 난 당신이 64 비트 정수를 표시 NSLog%qi%qu 형식 지정자를 사용할 수있다 "1393443048683555706"@ 문자열로 표현이 큰 번호 (INT되지 않음) 것을

+0

왜 문자열로 변환하지 않습니까? –

+0

모든 숫자는 바이너리 형식이기 때문에 16 진수의 문자열 표현이 필요합니다. 맞습니까? '[NSString stringWithFormat : @ "% x", someInteger]'는 어떨까요? – Costique

+0

잘못된 결과가 나타납니다 – leaf

답변

1

있는 "X"형식 지정자 32 비트 숫자입니다; 문자 값을 대문자로할지 여부에 따라 "qx"또는 "qX"중 하나를 사용해야합니다. 이러한 부호 오래 오래 값의 포맷터 있습니다, 참조 :

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1

다음, 당신은 당신이 NSLog에 직접 위했던 것처럼 문자열을 전달 안 -이 충돌을 일으킬 수 있습니다. 당신의 값이 문자열로 제공한다면, 당신이하고 싶은 것

NSLog(string); // bad!! 
NSLog(@"%@", string); // good 

: 문자열 값이 숫자로 강제 할 수없는 경우

NSString *longNumber = @"1393443048683555706"; 
NSLog(@"%qx", [longNumber longLongValue]); 

을 longLongValue 0 I를 반환합니다 자세한 내용은 NSString을 참조하십시오. 오류 (및 경계) 검사를 처리해야합니다. 당신이 문자열로 16 진수 값을 저장하려면

, 이렇게 :

NSString *hexRepresentation = [NSString stringWithFormat:@"%qx", [longNumber longLongValue]]; 

를 다시 최고의 오류 처리에 대한 돌봐.

+0

thanq. 완벽한 대답 :) – leaf

2

말을 잊어 버렸습니다. 귀하의 상수의 한계로, 64 비트 부호있는 수에 맞게 나타납니다

[−9223372036854775808 to 9223372036854775807]