iPhone записывает двоичные данные - PullRequest
5 голосов
/ 06 октября 2009

Как записать двоичные данные в файл? Я хочу написать float в файл, raw, а затем прочитать их обратно как float. Как ты это делаешь?

Ответы [ 2 ]

6 голосов
/ 06 октября 2009

Экспериментировал с этим:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *file = [documentsDirectory stringByAppendingPathComponent:@"binaryData"];

float b = 32.0f;

NSMutableData *data = [NSMutableData dataWithLength:sizeof(float)];
[data appendBytes:&b length:sizeof(float)];
[data writeToFile:file atomically:YES];

NSData *read = [NSData dataWithContentsOfFile:file];
float b2;
NSRange test = {0,4};
[read getBytes:&b2 range:test];

Странно то, что записанный файл имеет размер 8 байтов, а не 4. Можно даже инициализировать nsdata длиной 0, добавить число с плавающей запятой и затем записать, а затем файл будет 4 байта. Почему NSData добавляет 4 байта по умолчанию? NSData с длиной 4 должен привести к файлу с длиной 4, а не 8.

3 голосов
/ 24 марта 2011

Обратите внимание, что Objective-C является лишь расширением языка программирования C.

Обычно я создаю NSFileHandle, а затем записываю двоичные данные следующим образом:

NSFileHandle handle*;
float f;

write([handle fileDescriptor], &f, sizeof(float));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...