基本上,我的问题是 cocoa 中的有符号字符到整数和字符串转换。
我在开源 cocoa 蓝牙应用程序中找到了这段代码,并尝试将其应用到我自己的应用程序中。
基本上,我从变量“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);
}
提前致谢。
最佳答案
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 字符字符串 ( “string”
),并且对象的格式说明符是 %@
。 %@
替换为对要打印的对象调用 -description
方法返回的字符串。
关于objective-c - 有符号的 Char 到 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689110/