Скажем, у меня есть двоичный файл (сгенерированный с Java), содержащий 32-битное значение типа int. В настоящее время я использую следующий код Objective C для его анализа:
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];
Мой первый вопрос - спросить, является ли это обычным способом работы на iPhone, потому что я не нашел ничего похожего на Java DataInputStream.
Мой второй вопрос связан со строкой кода с memcpy. Я не понимаю, почему не работает следующая часть (более элегантная, менее «низкоуровневая»):
[[file readDataOfLength:4] getbytes:&intValue];
Я получаю предупреждение о сборке:
'NSData' may not respond to '-getbytes:'
На казни я получаю:
'NSInvalidArgumentException', reason: '*** -[NSConcreteData getbytes:]: unrecognized selector sent to instance