<44fa0000>
является представлением памяти большого двоичного числа двоичного числа с плавающей запятой 2000.0
. Чтобы получить номер обратно из данных, вы должны сначала прочитать его в UInt32
, преобразовать из бай-тина с бай-тином в главный, а затем передать результат в Float
.
В Swift 2, который был бы
func floatValueFromData(data: NSData) -> Float {
return unsafeBitCast(UInt32(bigEndian: UnsafePointer(data.bytes).memory), Float.self)
}
Пример:
let bytes: [UInt8] = [0x44, 0xFA, 0x00, 0x00]
let data = NSData(bytes: bytes, length: 4)
print(data) // <44fa0000>
let f = floatValueFromData(data)
print(f) // 2000.0
В Swift 3 вы использовали бы Data
вместо NSData
, а unsafeBitCast
можно заменить на инициализатор Float(bitPattern:)
:
func floatValue(data: Data) -> Float {
return Float(bitPattern: UInt32(bigEndian: data.withUnsafeBytes { $0.pointee } ))
}