NSData nesnesi kullanarak yüklediğim ikili bir dosyam var. Örneğin, bu ikili veri içinde 'abcd' karakter dizisini bulmak ve tüm dosyayı bir dizeye dönüştürmeden ofseti döndürmek için bir yol var mı? Basit bir cevap olması gerektiği gibi görünüyor, ama nasıl yapılacağından emin değilim. Herhangi bir fikir?İkili Veri İçinde Karakter Dizesi Bul
Bunu iOS 3'te yapıyorum, bu yüzden -rangeOfData:options:range:
ürünüm yok.
Bunu strstr önerdiğim için Altı Otto'ya vereceğim. Ben gitti ve C işlevi strstr için kaynak kodu bulundu ve sabit bir bayt dizisi üzerinde çalışmak için yeniden yazdı - bu rastgele sonlandırılmadığı için bir char dizisinden farklıdır. Bu tampon içerisinde bayt ilk geçtiği, aradığım şey, bayt içermelidir bayt dizisi için bir işaretçi döndürür
- (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;
}
: İşte ile sona erdi kodudur.
böyle diyoruz:
// data is the NSData object
const Byte *bytes = [data bytes];
Byte* index = [self offsetOfBytes:tag inBuffer:bytes ofLength:[data length]];
OffsetOfBytes için gönderdiğiniz kod: inBuffer: ofLength: verileriniz gerçekten boş karakterler içerebiliyorsa çok fazla sorunla karşılaşır (orijinal strstr() öğesinin çok fazlası var). En azından, bayt uzunluğundan geçmeniz gerekir, çünkü bu fonksiyonun ne kadar uzun olması gerektiği konusunda bir fikri yoktur. –
Hey. Geri dönüşünüz için teşekkür ederiz. OfLength: parametresindeki baytlar için bir uzunluktan geçiyorum, bu yüzden ne demek istediğinden emin değilim. Teşekkürler. –
İki bayt işaretçiden geçiyorsunuz, ancak yalnızca bir uzunluk. Bu, kodunuzun hem “bytes” hem de “buffer” kelimelerinin ne kadar sürdüğünü bilemeyeceğiniz anlamına gelir, yani aramanızdan birinin sonunu kapatmak tehlikesiyle karşı karşıya kalırsınız. –