如何将字节转换为浮点值在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