如何将字节转换为浮点值在swift中?

这是我的代码将字节数据转换为浮动。 我试着在这个网站给出的每一个答案。 我得到这个“<44fa0000>”字节数据的指数值

static func returnFloatValue(mutableData:NSMutableData)->Float { let qtyRange = mutableData.subdataWithRange(NSMakeRange(0, 4)) let qtyString = String(qtyRange) let qtyTrimString = qtyString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")) let qtyValue = Float(strtoul(qtyTrimString, nil, 16)/10) return qtyValue } 

谢谢

二进制浮点数2000.0 的大端存储器表示<44fa0000> 。 要从数据中获取数字,首先必须将其读取到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:)初始化器replace:

 func floatValue(data: Data) -> Float { return Float(bitPattern: UInt32(bigEndian: data.withUnsafeBytes { $0.pointee } )) } 

使用这个function:

 static func returnFloatValue(data: NSMutableData) -> Float { let bytes = [UInt8](data as Data) var f: Float = 0 memcpy(&f, bytes, 4) return f } 

你可以在这里看到它的行动:

 var initialValue: Float = 19.200 let data = NSMutableData(bytes: &initialValue, length: 4) func returnFloatValue(data: NSMutableData) -> Float { let bytes = [UInt8](data as Data) var f: Float = 0 memcpy(&f, bytes, 4) return f } var result:Float = returnFloatValue(data: data) print("f=\(result)")// f=19.2