objective-c - 有符号的 Char 到 Int

标签 objective-c cocoa-touch macos cocoa char

基本上,我的问题是 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/

相关文章:

objective-c - 如何使用 NSData 类别压缩目录?

ios - 如何在 ios 中从一个 View 导航到另一个 View ?

iOS CI 失败, "CoreUI: CUICatalog: couldn' t get 'kMGArtworkGraphicsFeatureSetFallbacks' from MGCopyAnswer got”

objective-c - 滚动 NSScrollView 时的回调?

Macbook 上的 Emacs 键盘映射

ios - 如何制作自定义标题然后图像描述属于该标题并且在 TableView 中进行相同的过程

iOS : Radio Button Programatically Without using any Image

macos - 无法在 Applescript 中获取给定应用程序的 POSIX 路径

objective-c - 如何使用 cocoa 将 OS X 中的视网膜切换为非视网膜

objective-c - NSDictionary 的 objectForKey 是否为 : rely on identity or equality?