2010-02-17 3 views
13

В приложении iphone я ищу конвертировать float в NSData для его отправки по Bluetooth, а затем конвертируется обратно, когда он будет получен. У меня есть Bluetooth часть работает нормально, но когда я использую это, чтобы преобразовать в NSData:Преобразование поплавков в NSData и обратно в Objective-C

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

Я не могу преобразовать его обратно к поплавку. Я пробовал несколько методов, но мне интересно, если это правильный способ кодирования float в NSData?

Благодаря

+1

Вы пытались отобразить NSData на стороне отправителя и на стороне приемника? – mouviciel

+1

Как я могу отобразить его, передать его в NSString ?? –

+1

Ваш друг здесь - инструмент с шестнадцатеричным дампом. Либо напишите сами, либо используйте 'NSLog()' для вывода NSData на консоль. Он напечатает его в шестнадцатеричном формате. –

ответ

28

Вот как кодировать и декодировать float с NSData:

кодирования:

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

декодирования:

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

Несколько вещей, чтобы отметить здесь:

1. Вы должны использовать NSMutableData если вы собираетесь добавить вещи к объекту данных после его создания. Другим вариантом является просто загружать данные в одном кадре:

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

2. метод getBytes:length: для извлечения байт из NSData объекта, а не для копирования байтов в него.

+1

Просто, что я был после, выглядел так, как будто я расшифровывал, когда думал, что я кодирую !! –

+1

Это может вызвать некоторые проблемы ':)' –

+0

Хороший ответ! Но не следует, чтобы преобразование из байтов использовало размер данных. Поэтому вместо sizeof (float) это будет [data getBytes: & z length: sizeof (data)]; –

Смежные вопросы