2012-12-03 1 views
1

Привет, я делаю приложение для iPAD, в котором мне нужно захватить данные, поступающие с внешнего устройства, которое отправляет 512 значений в секунду. Я использовал внешние аксессуары API от Apple для того же и есть код, как показано ниже: -захват потока данных с использованием внешних аксессуаров Apple API

- (void)stream:(NSStream*)theStream handleEvent:(NSStreamEvent)streamEvent 
{ 
    switch (streamEvent) 
{ 
    case NSStreamEventNone: //Sent when open complete 
    //NSLog(@"NSStreamEventNone"); 
    break; 
    case NSStreamEventOpenCompleted: //Sent when open complete 

    //NSLog(@"NStreamEventOpenCompleted: %@", theStream); 
    break ; 

    case NSStreamEventHasBytesAvailable: 
    { 
    //NSLog(@"NSStreamEventHasBytesAvailable"); 

    uint8_t buffer[1024]; 
    unsigned int len=0; 

    len=[(NSInputStream *)theStream read:buffer maxLength:1024]; 
    if(len>0){  

    NSData* data=[NSData dataWithBytes:buffer length:len]; 

    NSString *value = [[NSString alloc] initWithData:dataencoding:NSASCIIStringEncoding]; 

    } 
    } 
break; 

case NSStreamEventHasSpaceAvailable: 
    os = theStream; 
    break; 
case NSStreamEventErrorOccurred: 
    //NSLog(@"NSStreamEventErrorOccurred"); 
    break; 

    case NSStreamEventEndEncountered: 
    ////NSLog(@"NSStreamEventEndEncountered"); 
    break; 
    default: 
    break; 
    } 
} 

Что я получаю от этого какой-то искаженный текст без соответствующего кодирования. Я также попытался использовать приведенное ниже: -

NSString *value = [[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding]; 

, но это просто возвращает значение null. Edit: - когда я NSLog, я получаю ниже: -

vªª€ÿù…ªª€ ÿûƒªª€ÿK3ªª€ÿ£Ûªª€ÿ˳ªª€ÿ}ªª€ÿ噪ª€ 

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

+0

Вы использовали NSLog "dataencoding"? Вы получаете данные? –

+0

См. NSLog возвращаемого значения выше. – Rasmus

ответ

3

Ваш NSLog выглядит как строка расширенных символов ASCII. Предполагая, что они из расширенного набора символов Ascii от Apple, тогда данные uint8_t (1 байт), представленные началом фрагмента, который вы указали, являются:

¬Ä√ø√¬¬¬¬ ¬ ™ ¬Ä ...

Представлял десятичным это:

172, 196, 26, 248, 26, 192, 172, 214, 172, 34, 172 ...

является ли это ваши данные? Вот код для проверки вывода.

NSString *receivedString = @"€ÿù…ªª€"; // Change this to the string variable you were using with NSLog 

for (int i=0; i<[receivedString length]; i++) 
{ 
    unsigned char asciiCode = [ receivedString characterAtIndex:i]; 
    NSLog(@"Value at %d is %d", i, asciiCode); 
} 
0

Данные, полученные вами, являются необработанными. Скорее всего, они не символы UTF8. Скорее всего, вам нужно будет поместить каждые 2 байта в 2-байтовое целое непосредственно из байтов NSData.