Comment écrire des données binaires dans un fichier? Je veux écrire des flottants dans un fichier, brut, puis les lire comme flottants. Comment tu fais ça?Données binaires d'écriture iPhone
5
A
Répondre
6
expérimentent avec ceci:
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];
La chose étrange est que le fichier écrit semble être 8 octets et non 4. Il est même possible d'initialiser le NSData avec 0 longueur, ajoutez un flotteur puis écrire, puis le fichier sera de 4 octets. Pourquoi NSData ajoute 4 octets par défaut? Un NSData de longueur 4 devrait aboutir à un fichier de longueur 4, pas à 8.
3
Notez que Objective-C est seulement une extension du langage de programmation C.
Je crée généralement une NSFileHandle et écrire des données binaires ainsi:
NSFileHandle handle*;
float f;
write([handle fileDescriptor], &f, sizeof(float));
Questions connexes
- 1. Ecriture de données binaires
- 2. Données binaires vs caractère Données confusion
- 3. Service WCF avec données binaires
- 4. Données binaires Vb6 à C#
- 5. Données binaires avec pyserial (port série python)
- 6. Comment transférer des données binaires avec Python?
- 7. Données binaires dans .NET? (C++/CLI)
- 8. Lecture des données binaires avec l'erreur seekg
- 9. stocker des données binaires dans mysql
- 10. analyse de données binaires efficace et flexible
- 11. trouver les tables a des données binaires
- 12. flux de données binaires sur http
- 13. Envoi de binaires d'application iPhone AddHoc à Apple App Store
- 14. Lecture de données binaires de longueur indéterminée dans R
- 15. Données binaires lisibles par un humain utilisant Python
- 16. Evénement COM avec des données binaires dans les arguments
- 17. Galerie d'images Gridview à partir d'images de données binaires
- 18. Envoi de données binaires avec le client Restlet
- 19. Comment appeler une fonction à partir de données binaires
- 20. Insérer des données binaires dans SQL Server en utilisant PHP
- 21. Comment écrire des données binaires dans stdout dans python 3?
- 22. Insertion de données d'image brutes (binaires?) Dans mysql? (PHP)
- 23. Lecture des données binaires POSTed à partir de l'ASP classique
- 24. Problème avec python Twisted - envoyer des données binaires
- 25. Services Ria - Chargement différé d'images (ou de données binaires lourdes)
- 26. Comment écrire des données binaires pour le format d'archive 7z?
- 27. Exportation de données iPhone
- 28. iphone nslog données corrompues
- 29. Iphone type de données
- 30. SVN et les binaires
Peut-on utiliser un éditeur hexadécimal pour examiner le contenu du fichier quand il dispose de 8 octets? Il me semble que vous devriez être en mesure de choisir 4 qui sont votre flotteur et l'autre 4 peut vous donner une idée de ce qui ne va pas. – Tim
En effet. Le dernier 4 est le flotteur. Le fichier ressemble à ceci: 00 00 00 00 00 00 00 42 – quano
Apparemment, initier un NSMutableData avec une longueur l'amène à ajouter cette longueur à ses données et à pointer vers l'espace après. L'initialiser avec la longueur 0 est la solution. Alors on peut se demander pourquoi on voudrait l'initier avec n'importe quelle autre longueur que 0 du tout. – quano