iOS: как я могу удалить нулевые символы из буфера или строки? - PullRequest
0 голосов
/ 08 августа 2011

Я пытаюсь выполнить сравнение строк в iOS со строкой, полученной из сетевого потока.

Код, который читает поток:

uint8_t buffer[1024];
int len;
    while ([inputStream hasBytesAvailable]) 
    {
        len = [inputStream read:buffer maxLength:sizeof(buffer)];
        if (len > 0) 
        {
            NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
            [self handleServerResponse: intCommand Response:output];
         }else{
            [self endComms];
         }
     }

Сервер на другом конце всегда выдает ответы размером 1024 байта, причем chr (0) помещается в конец данных для заполнения буфера.

Когда я делаю сравнение строк:

if (strCut==@"B") {
   //do something...
}

Я всегда получаю отрицательный результат, предположительно потому, что строка связывается с ответом и множеством нулевых символов.

Я хотел бы иметь возможность убирать пустые символы из буфера при чтении ответа в строку, но мне не повезло в этом в iOS.

Помощь оценена!

Спасибо.

Dave

Ответы [ 2 ]

0 голосов
/ 08 августа 2011

Проблема в том, что iOS находится на более низком уровне, вероятно, для того, что вы используете, поэтому == фактически сравнивает адреса, а не строки. То, что вы хотите, это.

if ([strCut compare:@"B"] == NSOrderedSame) {
   ...
}

надеюсь, это поможет.

0 голосов
/ 08 августа 2011

Вы делаете неверное предположение о том, почему ваш код не работает.

Изменение:

if (strCut == @"B")

до:

if ([strCut isEqualToString:@"B"])

Для дальнейшего использования никогда не делайте предположений - используйте отладчик или другие инструменты, чтобы проверить, в чем проблема. Возможно, вы также захотите прочитать вступительную книгу по Objective-C.

...