2013-08-26 98 views
2

我想從包含幾個十六進制值的NSData對象中獲取浮點值。例如EC 51 38 41 從這4個字節值我想獲得浮點值11.52。我如何在xcode中執行此操作?從nsdata獲得浮點值objective-c iOS

我與NSScanner(scanFloat,scanHexFloat)NSNumberformatterNSNumber試了,我創建一個字節數組,並試圖float myFloat = *(float*)&myByteArray。所有這些選項我在這裏找到在stackoverflow。

我用C#測試它在Windows和那裏是沒有問題的:

byte[] bytes = new byte[4] { 0xEC, 0x51, 0x38, 0x41 }; 

float myFloat = System.BitConverter.ToSingle(bytes, 0); 

有誰知道我是如何做到這一點在Xcode ???

感謝本傑明

回答

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

試試這個。

0

我有NSScanner(scanFloat,scanHexFloat),NSNumberformatter和NSNumber的

你在這裏找錯了樹嘗試它。 NSScanner用於掃描字符串。 NSNumberNSData不一樣,並且NSNumberFormatter也不會與NSData一起使用。

NSData是一個普通的舊的二進制數據的容器。您顯然已在NSData實例中存儲了float;如果你想訪問它,你需要獲得數據的bytes,然後解釋這些字節,不管你喜歡什麼,例如。通過轉換成float

float *p = (float*)[myData bytes]; // -bytes returns a void* that points to the data 
float f = *p; 
5

當從國外協議轉換二進制數據,始終確保正確包括用於交換字節序:

uint32_t hostData = CFSwapInt32BigToHost(*(const uint32_t *)[data bytes]); 
float value = *(float *)(&hostData); 

你必須知道的編碼數據的字節序。您可能需要改用CFSwapInt32LittleToHost