Swift 4 - Double 到 big-endian 的高效转换

标签 swift binary double endianness data-conversion

我需要将 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/

相关文章:

ios - 隐藏 separatorColor 直到 UITableView 有内容

Swift 2/iOS 9 - 找不到 libz.dylib

python - 根据列表索引将二进制列表转换为组合所需的值

c - 在 C 文件中读取和写入(加倍)

c++ - 关于简单 CPU 仿真器实现的问题

java - 对于 JAMA 或其他库,将 List<List<Double>> 转换为 double[][]

Java:int和double做1亿次简单计算耗时0毫秒

swift - 隐藏后退按钮嵌入式 UINavigationController swift 3

swift - iOS 12 wkwebview 无法使用重定向?

java - 在数组中存储坐标并在java中比较它们的最佳方法?