Domanda

Supponiamo di avere un file binario (generato con Java) contenente un valore int a 32 bit. Attualmente sto usando il seguente codice Objective-C per analizzarlo:

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];

La mia prima domanda è chiedermi se è il modo comune di fare cose su iPhone perché non ho trovato nulla vicino a DataInputStream di Java.

La mia seconda domanda è relativa alla riga di codice con un memcpy. Non capisco perché la parte seguente (più elegante, meno "di basso livello") non funziona invece:

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

Ricevo un avviso sulla build:

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

Al momento dell'esecuzione, sto ottenendo:

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

Soluzione

Per l'ultima domanda, usa getBytes (maiuscola B).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top