2010-02-17 6 views
13

Dans une application iphone, je cherche à convertir un float en NSData pour qu'il soit envoyé par Bluetooth et ensuite reconverti quand il est reçu. J'ai la partie Bluetooth fonctionne très bien, mais quand je l'utiliser pour convertir en NSData:Conversion de flottants en NSData et retour en Objective-C

Je ne peux pas le reconvertir
NSData *data = [[NSData alloc]init]; 

float z = 9.8574; // Get the float value, 9.8574 is just an example 

[data getBytes:&z length:sizeof(float)]; 

à un flotteur. J'ai essayé quelques méthodes mais je me demande si c'est la bonne façon d'encoder le float à NSData ??

Merci

+1

Avez-vous essayé d'afficher votre NSData côté expéditeur et côté récepteur? – mouviciel

+1

Comment puis-je l'afficher, le nourrir dans un NSString ?? –

+1

Votre ami ici est un outil de vidage hexadécimal. Soit vous en écrivez vous-même, soit vous utilisez NSLog() pour imprimer le NSData sur la console. Il va l'imprimer en hexadécimal. –

Répondre

28

Voici comment coder et décoder un float avec NSData:

encodage:

NSMutableData * data = [NSMutableData dataWithCapacity:0]; 
float z = ...; 
[data appendBytes:&z length:sizeof(float)]; 

décodage:

NSData * data = ...; // loaded from bluetooth 
float z; 
[data getBytes:&z length:sizeof(float)]; 

Un couple de choses à noter ici:

1. Vous devez utiliser NSMutableData si vous allez ajouter des choses à l'objet de données après l'avoir créé. L'autre option consiste à charger simplement les données en un seul coup:

NSData * data = [NSData dataWithBytes:&z length:sizeof(float)];

2. la méthode getBytes:length: est pour récupérer octets d'un objet NSData, non pas pour la copie octets en elle.

+1

Juste ce que je cherchais, j'avais l'air de décoder quand je pensais encoder !! –

+1

Cela pourrait causer quelques problèmes ':)' –

+0

Bonne réponse! Mais ne devrait pas la conversion de bytes utiliser la taille des données. Donc, au lieu de sizeof (float) ce serait [data getBytes: & z length: sizeof (data)]; –