Преобразование поплавков в NSData и обратно в Objective-C - PullRequest
13 голосов
/ 17 февраля 2010

В приложении для iphone я ищу преобразование числа с плавающей точкой в ​​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)];

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

Спасибо

1 Ответ

28 голосов
/ 17 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...