Подпись Char к Int - PullRequest
       18

Подпись Char к Int

1 голос
/ 31 декабря 2011

По сути, моя проблема заключается в преобразовании знака в int и преобразовании строк в какао.

Я нашел этот кусок кода в приложении bluetooth с открытым исходным кодом для какао и пытаюсь применить его к своему.

По сути, я получаю вывод char со знаком из переменной "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);
}

Заранее спасибо.

1 Ответ

4 голосов
/ 31 декабря 2011

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 для объекта, который будет напечатан.

...