2012-05-01 55 views
0

我在下面的方式比较字符数组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 

我收到的数据,那么receining NSData的,我需要这个数据与下面的数组

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

比较监守数据来临从服务器,但数据是动态的我需要比较很多这样的阵列与服务器数据我发现下面的方法,但它是静态方法,但不能比较所有阵列在以下方式

 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

如果您使用您比较(ch[3])数据的NSData对象,那么你可以使用-[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

这工作,如果你有在'NSArray'多个'NSData'对象。只需循环它们并检查范围以查看是否有任何匹配。 – Joe

+0

也可以帮我看看那个数据来自哪个数据ic来自服务器,作为服务器是一个设备,有时它发送奇怪的数据包,那么怎么才能通过NSLog和UIAlert查看那个数据,请帮忙 – Ali

+1

你可以'NSLog使用'%@'指定'NSData'对象。 'NSLog(@“%@”,data);'。 – Joe