在 Swift 中从二进制文件中读取整数

Posted

技术标签:

【中文标题】在 Swift 中从二进制文件中读取整数【英文标题】:Read integers from binary file in Swift 【发布时间】:2019-11-25 16:50:25 【问题描述】:

我有一个代表旧打孔卡的二进制文件。该文件有以下数据:

Function(unsigned int8 min: 0, max: +255), 
Vertical Movement (signed int16 min: -32.768,  max: +32.767) 
Horizontal Movement (signed int16 min: -32.768,  max: +32.767)

这种模式将重复大约不同的值。 100.000 次,将代表具有机器功能的 2D CAD 设计。

文件/穿孔卡片的每一行有 5 个字节(1 x Uint8, 2 x int16)。阅读它的最佳方式是什么? 在 C# 中,我使用流来读取一个接一个字节,但在 Swift 5 中找不到示例。

【问题讨论】:

【参考方案1】:

您可以使用这样的函数(Swift 5)打开二进制文件:

func getFile(forResource resource: String, withExtension fileExt: String?) -> [UInt8]? 
    // See if the file exists.    
    guard let fileUrl: URL = Bundle.main.url(forResource: resource, withExtension: fileExt) else 
        return nil
    

    do 
        // Get the raw data from the file.
        let rawData: Data = try Data(contentsOf: fileUrl)

        // Return the raw data as an array of bytes.
        return [UInt8](rawData)
     catch 
        // Couldn't read the file.
        return nil
    

用法:

if let bytes: [UInt8] = getFile(forResource: "foo", fileExt: "json") 
    for byte in bytes 
        // Process single byte...
    

然后简单地遍历字节并将它们格式化为您的规范。

【讨论】:

谢谢,这正是我想要的。它只需要在使用部分稍作改动。你在哪里写fileExt: "json" Xcode 告诉你把它改成withExtension: "json"

以上是关于在 Swift 中从二进制文件中读取整数的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何将从二进制文件中读取的字节转换为数字

读取二进制文件碎片并转换为具有内存效率的整数

无法使用 fstream 从二进制文件中读取字符串,而是显示奇怪的符号

在python中如何从二进制文件中读取信息

Dask 从二进制文件中读取数据

C - 从二进制文件中读取位