2011-12-31 22 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