2014-07-24 51 views
0

注意:在其他問題中,它們會比較存儲在NSData對象中的值,而不是其字節。將NSData與字節序列進行比較?

我想這樣的事情進行:

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

唯一的解決辦法,我發現:

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

但我不喜歡,我需要在比較添加額外的周邊backets。有更好的解決方案嗎?

回答

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 –