Как записать бинарные данные в файл? Я хочу записать поплавки в файл, необработанный, а затем прочитать их как поплавки. Как ты это делаешь?
iPhone пишет бинарные данные
Ответы (2)
Были эксперименты с этим:
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 с нулевой длиной, добавить число с плавающей запятой и затем записать, и тогда файл будет 4 байта. Почему NSData по умолчанию добавляет 4 байта? NSData с длиной 4 должен привести к файлу с длиной 4, а не 8.
person
quano
schedule
06.10.2009
Можете ли вы использовать шестнадцатеричный редактор для проверки содержимого файла, когда он имеет 8 байтов? Мне кажется, вы должны быть в состоянии выбрать, какие 4 являются вашим поплавком, а остальные 4 могут дать вам ключ к пониманию того, что идет не так.
- person Tim; 06.10.2009
Конечно. Последние 4 - поплавок. Файл выглядит так: 00 00 00 00 00 00 00 42
- person quano; 06.10.2009
По-видимому, инициализация NSMutableData с длиной приводит к тому, что она добавляет эту длину к своим данным и впоследствии указывает на пробел. Инициирование его длиной 0 является решением. Тогда можно задаться вопросом, почему вообще нужно инициализировать его любой другой длиной, кроме 0.
- person quano; 06.10.2009
Обратите внимание, что Objective-C — это только расширение языка программирования C.
Обычно я создаю NSFileHandle, а затем пишу бинарные данные следующим образом:
NSFileHandle handle*;
float f;
write([handle fileDescriptor], &f, sizeof(float));
person
Sulthan
schedule
24.03.2011