Ho un file binario che ho caricato utilizzando un oggetto NSData. Esiste un modo per individuare una sequenza di caratteri, ad esempio "abcd", all'interno di quei dati binari e restituire l'offset senza convertire l'intero file in una stringa? Sembra che dovrebbe essere una risposta semplice, ma non sono sicuro di come farlo. Qualche idea?Trova stringa di caratteri in dati binari
Sto facendo questo su iOS 3 quindi non ho -rangeOfData:options:range:
disponibile.
Ho intenzione di assegnare questo a Sixteen Otto per suggerire strstr. Sono andato e ho trovato il codice sorgente per la funzione C strstr e lo ho riscritto per funzionare su un array Byte a lunghezza fissa - che per inciso è diverso da un array di caratteri dato che non è terminato con null. Ecco il codice che ho finito con:
- (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;
}
Ciò restituisce un puntatore alla prima occorrenza di byte, la cosa che sto cercando, in un tampone, l'array di byte che dovrebbe contenere byte.
mi chiamano così:
// data is the NSData object
const Byte *bytes = [data bytes];
Byte* index = [self offsetOfBytes:tag inBuffer:bytes ofLength:[data length]];
Il codice che hai postato per offsetOfBytes: inBuffer: ofLength: avrà un sacco di problemi se i tuoi dati possono davvero contenere valori nulli Per lo meno, è necessario passare la lunghezza dei byte, poiché questa funzione non ha idea di quanto tempo dovrebbe essere. –
Ehi. Grazie per il feedback. Sto passando una lunghezza per i byte nel parametro ofLength :, quindi non sono sicuro di cosa intendi. Grazie. –
Stai passando due puntatori di byte, ma solo una lunghezza. Ciò significa che il tuo codice non può sapere per quanto tempo sia "byte" che "buffer", il che significa che corri il pericolo di esaurire la fine di uno di essi nella ricerca. –