Warm tip: This article is reproduced from serverfault.com, please click

floating point-如何快速将浮点值转换为字节数组?

(floating point - How to convert a float value to byte array in swift?)

发布于 2016-04-23 15:17:08

我用于获取字节数据的代码,但没有获取浮点值的正确字节数据

let count = data.length / sizeof(UInt32)

// create array of appropriate length:
var array = [UInt32](count: count, repeatedValue: 0)

// copy bytes into array
data.getBytes(&array, length:count * sizeof(UInt32))

print(array)
Questioner
Nisha Nair
Viewed
0
Martin R 2020-07-06 13:34:17

FloatNSData

var float1 : Float = 40.0
let data = NSData(bytes: &float1, length: sizeofValue(float1))
print(data) // <00002042>

...然后返回Float

var float2 : Float = 0
data.getBytes(&float2, length: sizeofValue(float2))
print(float2) // 40.0

(这同样适用于其他“简单”类型的喜欢DoubleInt...)

使用新Data类型更新Swift 3

var float1 : Float = 40.0
let data = Data(buffer: UnsafeBufferPointer(start: &float1, count: 1))
print(data as NSData) // <00002042>

let float2 = data.withUnsafeBytes { $0.pointee } as Float
print(float2) // 40.0

(另请参阅往返于数据的Swift数字类型

Swift 4及更高版本的更新:

var float1 : Float = 40.0
let data = Data(buffer: UnsafeBufferPointer(start: &float1, count: 1))

let float2 = data.withUnsafeBytes { $0.load(as: Float.self) } 
print(float2) // 40.0

备注: load(as:)要求数据正确对齐,因为Float这将在4字节边界上。有关适用于任意对齐数据的其他解决方案,请参见例如往返于数据的Swift数类型往返