2008-12-31 6 views
1

Dites que j'ai un fichier binaire (généré avec Java) contenant une valeur int de 32 bits. J'utilise actuellement le code suivant Objective-C pour l'analyser:Quel est le moyen le plus simple d'analyser les fichiers binaires dans Cocoa Touch?

NSString *path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"dat"]; 
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path]; 

unsigned long intValue; 
memcpy(&intValue, [[file readDataOfLength:4] bytes], 4); 
intValue = NSSwapBigLongToHost(intValue); 

[file closeFile]; 

Ma première question est de se demander si c'est la façon courante de faire les choses sur l'iPhone parce que je ne trouve rien près de la DataInputStream Java .

Ma deuxième question concerne la ligne de code avec un memcpy. Je n'undestand pourquoi la partie suivante (plus élégante, moins « bas niveau ») ne fonctionne pas à la place:

[[file readDataOfLength:4] getbytes:&intValue]; 

Je reçois un avertissement Surchauffe:

'NSData' may not respond to '-getbytes:' 

Lors de l'exécution , J'obtiens:

'NSInvalidArgumentException', reason: '*** -[NSConcreteData getbytes:]: unrecognized selector sent to instance 

Répondre

2

Pour la dernière question, utilisez getBytes (majuscule B).