基本上,我的问题是在cocoa中使用signed char to int和string转换。
我在开源可可蓝牙应用程序中找到了这段代码,并试图将它应用到我自己的代码中。
基本上,我从变量“RSSI”获得一个带符号的char输出,并希望将其转换为int和string,输出到日志的字符串和用于进一步计算的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);
}
提前致谢。
答案 0 :(得分: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字符串字符串("string"
),格式说明符对象是%@
。 %@
由在要打印的对象上调用-description
方法返回的字符串替换。