2011-12-31 58 views
1

基本上,我的問題是一個簽名字符到可可中的int和字符串轉換。簽名的字符到INT

我在一個開源的可可藍牙應用程序中找到了這段代碼,並試圖將它應用到我自己的代碼中。

基本上,我從變量「RSSI」得到一個帶符號的字符輸出,並且想要將它轉換爲一個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的格式字符串應該是Objective-C字符串文字(@"string"),而不是標準的C char字符串("string"),並且對象的格式說明符是%@%@被替換爲通過調用要打印的對象上的-description方法返回的字符串。

+0

完美。感謝:D – Josh 2011-12-31 18:07:17