2014-07-24 1 views
0

참고 : 다른 질문에서는 NSData 객체에 저장된 값과 해당 바이트를 비교하지 않습니다.바이트 시퀀스와 NSData를 비교합니까?

나는 이런 식으로 뭔가를 수행 할 :

NSData *d = ...; 
if (d == "fff1") { 
    ... 
} 

내가 발견 한 유일한 해결책 :

NSData *d = ...; 
NSString *str = [NSString withFormat:@"%@", d]; 
if ([str isEqualToString:@"<fff1>"] { 
    ... 
} 

그러나 내가 비교에 추가 주변, 집합을 추가 할 필요가 있음을 좋아하지 않는다. 더 나은 해결책이 있습니까? 원시 데이터를 비교의 목적

답변

2

당신은 memcmp을 사용

NSData *dataA; 
void *someBuffer; 
if(memcmp([dataA bytes], someBuffer, dataA.length) == 0) ; //they are the same 

주 당신은 그 길이가 버퍼의 너무 크지보고해야한다.

편집 : 추가NSData절차 :

또는 더 나은 아직 당신이 NSData로 문자열을 변환하고 NSData에 비교 할 수있는 :

NSData *d = ...; 
    if([d isEqualToData:[NSData dataWithBytes:"fff1" length:sizeof("fff1")]]) { 

    } 
+0

다음 중 한 가지 방법 모두 작동하지 않습니다를 . – user3798020

+1

글쎄, 문제는 당신이 데이터 "fff1"을 표현하는 방법에서 가장 가능성이 높습니다. [NSData dataWithBytes : "fff1"length : sizeof ("fff1")] 로깅을 시도하고 결과를 확인하십시오. 이 문자 값은 내가 볼 수있는 것과 비교하는 것과는 아무 관련이 없습니다. NSData에 "설명"메서드가 정의 된 이유 때문에 메서드가 작동하는 단순한 행운입니다. 사과가이 방법을 변경하면 코드가 작동을 멈 춥니 다. –

+0

이 게시물을보십시오 : http://stackoverflow.com/questions/7317860/converting-hex-nsstring-to-nsdata –