2008-12-30 8 views
2

Vu le code Java suivant pour générer un fichier binaire:Comment analyser un fichier binaire avec des flottants (généré en Java) en utilisant Cocoa Touch?

DataOutputStream out = new DataOutputStream(new FileOutputStream("foo.dat")); 
out.writeInt(1234); 
out.writeShort(30000); 
out.writeFloat(256.384f); 

J'utilise le code suivant Objective-C et de gérer pour analyser l'int et les valeurs courtes:

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

unsigned short shortValue; 
memcpy(&shortValue, [[file readDataOfLength:2] bytes], 2); 
shortValue = NSSwapBigShortToHost(shortValue); 

Mon problème pour l'instant est avec la valeur float: des indices sur la façon de l'analyser?

Répondre

5

Juste nous les fonctions et les types fournis par <Foundation/Foundation.h>. Notez qu'ils utilisent un type spécial pour maintenir le flotteur avant que les octets ne soient échangés. En effet, si vous échangez les octets d'une valeur à virgule flottante, elle peut être transformée en un NaN de signalisation, et sur certains processeurs, cela provoquera une exception matérielle en l'assignant simplement à une variable.

2

Désolé, je ne peux pas fournir toute réponse, mais je peux dire que le flotteur Java est enregistré dans le fichier en tant que représentation IEEE quatre octets 754 du flotteur selon ce document:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Float.html#floatToIntBits(float)

Cela décrit la structure exacte de la valeur sauvegardée, de sorte que vous pouvez le lire en int et analyser manuellement les bits pour le significand et l'exposant dans un float. Il semble qu'il devrait y avoir un appel de bibliothèque pour analyser les valeurs à virgule flottante contenues dans un int de ce format. Espérons que quelqu'un d'autre connaîtra un appel de bibliothèque pour gérer cela.

Questions connexes