如何在Swift中将字节数组转换为双精度值?
(这是一个NSInputStream扩展)
我的代码段附在下面,但未返回正确的double值:
func readDouble() -> Double
{
var readBuffer = Array<UInt8>(count:sizeof(Double), repeatedValue: 0)
let numberOfBytesRead = self.read(&readBuffer, maxLength: readBuffer.count)
let help1 = Int(readBuffer[0] & 0xff) << 56 | Int(readBuffer[1] & 0xff) << 48
let help2 = Int(readBuffer[2] & 0xff) << 40 | Int(readBuffer[3] & 0xff) << 32
let help3 = Int(readBuffer[4] & 0xff) << 24 | Int(readBuffer[5] & 0xff) << 16
let help4 = (Int(readBuffer[6] & 0xff) << 8) | Int(readBuffer[7] & 0xff)
return Double(help1 | help2 | help3 | help4)
}
最佳答案
我的理解是您的字节数组是二进制表示的序列化。但是,您使用的Double
构造函数采用整数值并返回相应的Double
。 Double(3)
返回3.0
。
正确的构造函数可能是Double(_bits:)
,但是它接受Builtin.FPIEEE64
,看起来其可用性是实现细节。您可能应该考虑制作一个C函数并将其桥接到Swift。