gpt4 book ai didi

swift - swift3 中将二进制读入 Float 的更简洁的方法

转载 作者:搜寻专家 更新时间:2023-11-01 06:37:44 24 4
gpt4 key购买 nike

我目前正在这样做:

let floatData: [UInt8] = [0x00, 0x3F, 0xC0, 0x00, 0x00, 0x66, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x66, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x66, 0x00]


floatData.withUnsafeBufferPointer { (bytes: UnsafeBufferPointer<UInt8>) -> Float in
let byteOffset = 1
var floatBytes : UInt32 = (UInt32(bytes[byteOffset]) << 24)
floatBytes |= (UInt32(bytes[byteOffset+1]) << 16)
floatBytes |= (UInt32(bytes[byteOffset+2]) << 8)
floatBytes |= UInt32(bytes[byteOffset+3])

return Float(bitPattern: floatBytes)
}

这很好用,但有点麻烦。我试过将字节转换为 UnsafeBufferPointer<UInt32>但编译器不喜欢那样。

是否有更简洁的方法来提取我缺少的这个位模式?

谢谢

最佳答案

可能的解决方案:

let byteOffset = 1
let result = Data(bytes: floatData[byteOffset..<byteOffset+4]).withUnsafeBytes {
(ptr: UnsafePointer<UInt32>) in
Float(bitPattern: UInt32(bigEndian: ptr.pointee))
}
print(result) // 1.5

Data 对象是从数组切片创建的,并且使用指向数据的指针调用闭包。ptr.pointee 取消引用数据,并且 UInt32(bigEndian:)将其转换为主机字节顺序。

关于swift - swift3 中将二进制读入 Float 的更简洁的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39490771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com