Преобразование float в NSData и обратно в Objective-C

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

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. Я пробовал несколько методов, но мне интересно, правильно ли это кодировать float в NSData??

Спасибо

Ответы

Ответ 1

Вот как кодировать и декодировать 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, а не для копирования в него байтов.