2011-12-31 4 views
1

기본적으로 내 문제는 int char 및 signed string to cocoa입니다.Signed Char to Int

오픈 소스 코코아 블루투스 애플리케이션에서이 코드 조각을 발견했으며이를 내 자신에게 적용하려고합니다.

기본적으로 "RSSI"변수에서 부호있는 char 출력을 얻고이를 int 및 문자열, 로그에 출력하기위한 문자열 및 추후 계산을 위해 int로 변환하려고합니다. 그러나, 내가 뭘하려고해도, 나는 그것을 변환 얻을 수없는 것, 그리고 그냥 로그에 서명 된 문자를 출력하려고하면 EXEC_BAD_ACCESS를 얻을.

서명 된 문자의 일반적인 값은 "-57 '\ 307'"이 프로세스에서 직접 인용 된 후 NSLog에 의해 보류됩니다. 코드는 다음과 같습니다.

- (BOOL)isInRange { 
    BluetoothHCIRSSIValue RSSI = 127; /* Valid Range: -127 to +20 */ 

    if (device) { 
     if (![device isConnected]) { 
      [device openConnection]; 
     } 
     if ([device isConnected]) { 
      RSSI = [device rawRSSI]; 
      [device closeConnection]; 
      NSLog(RSSI); 
     } 
    } 
    return (RSSI >= -60 && RSSI <= 20); 
} 

미리 감사드립니다.

답변

4

NSLog()는 첫 번째 인자로 NSString 형식 문자열을 사용하고, 그 후 서식 캐릭터 라인 내의 서식 지시자에 대한 변수의 (선택) 가변 길이 목록 :

NSLog(@"RSSI: %c", RSSI);

당신이있어 무엇 지금은 (NSLog(RSSI);) 단순히 잘못되었습니다. 그것은 당신이이 같은 경고를 컴파일러 제공해야한다 : 당신은 항상주의를 기울이 그들을 무시하지, 경고를 컴파일러한다

warning: passing argument 1 of 'NSLog' makes pointer from integer without a cast 
warning: format not a string literal and no format arguments 

. 특히 경고가 참조하는 것과 같은 줄에서 프로그램이 충돌 할 때 실수를 저질렀습니다.

덧붙여 말하자면, NSLog()printf()과 매우 유사합니다. 두 가지 주요 차이점은 NSLog의 형식 문자열이 표준 C 문자열 ("string")이 아닌 Objective-C 문자열 리터럴 (@"string")이어야하고 개체의 형식 지정자가 %@이어야합니다. %@은 인쇄 할 개체에서 -description 메서드를 호출하여 반환 된 문자열로 바뀝니다.

+0

Perfect. 고마워 – Josh