2009-10-06 14 views
5

¿Cómo se escriben los datos binarios en un archivo? Quiero escribir flotantes en un archivo, en bruto, y luego volver a leerlos como flotadores. ¿Cómo haces eso?iPhone escribiendo datos binarios

Respuesta

6

estado experimentando con esto:

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

Lo extraño es que el archivo escrito parece ser de 8 bytes y no 4. Es incluso posible inicializar el NSData con 0 longitud, añadir un flotador y luego escribe, y luego el archivo será de 4 bytes. ¿Por qué NSData agrega 4 bytes de forma predeterminada? Un NSData con longitud 4 debe dar como resultado un archivo con longitud 4, no 8.

+0

Se puede utilizar un editor hexadecimal para examinar el contenido del archivo cuando tiene 8 bytes? Me parece que deberías poder elegir cuáles son tus 4 flotadores y los otros 4 pueden darte una pista de lo que está pasando mal. – Tim

+0

De hecho. Los últimos 4 es el flotador. El archivo se ve así: 00 00 00 00 00 00 00 42 – quano

+0

Aparentemente al ingresar un NSMutableData con una longitud hace que anexe esa longitud a sus datos y señale el espacio después. Iniciándolo con longitud 0 es la solución. Entonces uno puede preguntarse por qué uno querría iniciarlo con cualquier otra longitud que 0 en absoluto. – quano

3

Tenga en cuenta que Objective-C es solo una extensión del lenguaje de programación C.

Por lo general crear un NSFileHandle y luego escribir datos binarios de esta manera:

NSFileHandle handle*; 
float f; 

write([handle fileDescriptor], &f, sizeof(float));