我需要将 Double 转换为 big-endian,以便使用石油工业二进制文件标准将其写入文件,该标准最初是在 1970 年代为 IBM 半英寸 9 磁道磁带定义的!
我需要非常高效的 Swift 4 代码,因为这种转换在两个嵌套循环中进行,并且将执行超过 100,000 次。
最佳答案
您可以创建一个包含大端表示的 UInt64
Double
与
let value = 1.0
var n = value.bitPattern.bigEndian
为了将其写入文件,您可能需要将其转换
到数据
:
let data = Data(buffer: UnsafeBufferPointer(start: &n, count: 1))
print(data as NSData) // <3ff00000 00000000>
如果许多连续的浮点值被写入文件
那么创建一个 [UInt64]
数组会更有效
使用大端表示并将其转换为 Data
,
例如
let values = [1.0, 2.0, 3.0, 4.0]
let array = values.map { $0.bitPattern.bigEndian }
let data = array.withUnsafeBufferPointer { Data(buffer: $0) }
(以上所有内容均使用 Swift 3 和 4 编译。)
关于Swift 4 - Double 到 big-endian 的高效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45775554/