签署Char to Int

时间:2011-12-31 16:11:37

标签: objective-c cocoa-touch macos cocoa char

基本上,我的问题是在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);
}

提前致谢。

1 个答案:

答案 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方法返回的字符串替换。