2012-05-01 4 views
0

Я receining NSData следующего способуСравнивая массив символов contatinig гекса значение

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 
    { 
    char *ptr = (void *)[data bytes]; // set a pointer to the beginning of your data bytes 

Я получаю данные, то мне нужно, чтобы сравнить эти данные со следующим массивом

 char ch[3]={0x04,0x01,0X00}; 

becuase, что данные поступают от сервера, но данные динамические. Мне нужно сравнить многие такие массивы с данными сервера, которые я нашел следующим методом, но он является статическим методом, но не может сравнивать все массивы следующим образом.

 if(*ptr == 0x04) { 
     } 
     ptr++; 
     if(*ptr == 0x01) { 
     } 
    ptr++; 
    if(*ptr==0X00){ 
     } 
but i can not compare all array so please help how 

я могу сравнить

   char *ptr = (void *)[data bytes]; 

с

   char ch[3]={0x04,0x01,0X00}; 

пожалуйста, помогите

ответ

2

Если вы используете NSData объект для данных, которые вы сравниваете (ch[3]), то вы можете использовать -[NSData rangeOfData:options:range:] для найти шаблон.

Вот пример

//This is just mock up data to represent what would be passed into your method 
unsigned char ch1[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x04, 0x01, 0x00, 0x0F }; 
NSData *data1 = [[NSData alloc] initWithBytes:ch1 
             length:sizeof(ch1)]; 
//This is the data used for the comparison 
NSData *data2 = [[NSData alloc] initWithBytes:(unsigned char[]){0x04, 0x01, 0x00} 
             length:3]; 

NSRange range = [data1 rangeOfData:data2 
          options:0 
          range:NSMakeRange(0, [data1 length])]; 

if(range.location != NSNotFound) 
{ 
    NSLog(@"Found pattern!"); 
} 
+0

Это работает, если у вас есть несколько файлов 'объектов NSData' в качестве' NSArray'. Просто переверните их и проверьте диапазоны, чтобы увидеть, если они совпадают. – Joe

+0

также можете помочь мне, пожалуйста, как можно увидеть данные, данные которых поступают с сервера, так как сервер является устройством, а иногда он отправляет странные пакеты, поэтому как можно просмотреть эти данные NSLog и UIAlert, пожалуйста, помогите – Ali

+1

Вы можете 'NSLog 'объект' NSData', используя '% @'. 'NSLog (@"% @ ", data);'. – Joe

Смежные вопросы