2010-02-17 131 views
13

在iphone应用程序中,我正在寻找将float转换为NSData以便通过蓝牙发送,然后在收到时再转换回来。我有蓝牙部分工作正常,但是当我用它来转换为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)]; 

我无法将其转换回浮动。我试了几个方法,但我想知道这是否是正确的方式来编码浮点数据到NSData?

由于

+1

你有没有尝试在发送端和接收端显示你的NSData? – mouviciel 2010-02-17 14:54:37

+1

如何显示它,将其馈入NSString? – 2010-02-17 14:57:31

+1

你的朋友在这里是一个十六进制转储工具。可以自己写一个或使用'NSLog()'将NSData输出到控制台。它将以十六进制打印它。 – 2010-02-17 14:59:11

回答

28

下面是如何编码和解码floatNSData

编码:

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

几件事情要注意这里:

你必须使用NSMutableData如果你要创建后的东西添加到数据对象。另一种选择是简单地加载所有在一杆的数据:

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

2.getBytes:length:方法是用于检索字节从NSData对象,而不是用于复制字节到它。

+1

正是我以后,看起来像我正在解码,当我以为我编码! – 2010-02-17 15:15:37

+1

这可能会导致一些问题':)' – 2010-02-17 15:17:15

+0

很好的答案!但不应该从字节转换使用数据大小。因此,不是sizeof(float),而是[data getBytes:&z length:sizeof(data)]; – 2017-11-26 12:48:41