我有一个使用 NSData 对象加载的二进制文件。有没有办法在二进制数据中定位一系列字符,例如“abcd”并返回偏移量而不将整个文件转换为字符串?似乎这应该是一个简单的答案,但我不知道该怎么做。有任何想法吗?
我在 iOS 3 上这样做,所以我没有-rangeOfData:options:range:
。
我将把这个奖励给 16 奥托,因为他建议了 strstr。我找到了 C 函数 strstr 的源代码,并将其重写为在固定长度的 Byte 数组上工作——顺便说一下,它与 char 数组不同,因为它不是以空值结尾的。这是我最终得到的代码:
- (Byte*)offsetOfBytes:(Byte*)bytes inBuffer:(const Byte*)buffer ofLength:(int)len;
{
Byte *cp = bytes;
Byte *s1, *s2;
if ( !*buffer )
return bytes;
int i = 0;
for (i=0; i < len; ++i)
{
s1 = cp;
s2 = (Byte*)buffer;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return cp;
cp++;
}
return NULL;
}
这将返回一个指针,指向第一次出现的字节,我正在寻找的东西,在缓冲区中,应该包含字节的字节数组。
我这样称呼它:
// data is the NSData object
const Byte *bytes = [data bytes];
Byte* index = [self offsetOfBytes:tag inBuffer:bytes ofLength:[data length]];