0

次の方法で NSData を受信して​​います

 - (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};

データはサーバーから来ていますが、データは動的であるため、多くのそのような配列を次の方法で見つけたサーバーデータと比較する必要がありますが、それは静的な方法ですが、次の方法ですべての配列を比較することはできません

     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};

助けてください

4

1 に答える 1

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!");
}
于 2012-05-01T18:13:31.860 に答える