2010-02-17 91 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