gpt4 book ai didi

arrays - 如何将文件读入整数数组

转载 作者:行者123 更新时间:2023-11-30 10:08:28 24 4
gpt4 key购买 nike

在我的应用程序文档文件夹中,我有一个文件,我试图将其逐字节读取到 UInt8 数组中,其中每个元素代表一个字节。我该怎么做呢?该文件恰好名为 Q1.dat。

这是我不成功的尝试:

func readArray() -> [Int]? {
if let arrayPath: String = createArrayPath() {
if let arrayFromFile: [Int] = NSArray(contentsOfFile: arrayPath) as? [Int] {
return arrayFromFile
}
}
return nil
}

func createArrayPath () -> String? {
if let docsPath: String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last {
return ((docsPath as NSString).stringByAppendingPathComponent("Q1") as NSString).stringByAppendingPathExtension("dat")
}
return nil
}

最佳答案

尝试这样的事情:

let filePath = "/Path/To/Directory/Q1.dat"

var bytes = [UInt8]()

if let data = NSData(contentsOfFile: filePath) {

var buffer = [UInt8](count: data.length, repeatedValue: 0)
data.getBytes(&buffer, length: data.length)
bytes = buffer
}

很抱歉,我无法对其进行测试,但是稍微修改一下,它应该会为您提供一个 UInt8 数组,每个数组代表来自文件。

编辑:如果您确实希望这是一个 Int 数组而不是 UInt8 数组,只需 map bytes Int 数组:

let intBytes = bytes.map { Int($0) }

...尽管一般来说,不清楚为什么要使用字节集合以外的任何内容,字节集合最适合表示为一系列 UInt8

如果你真的非常想要这些 1 和 0,那么将其添加到最后就可以了:

var onesAndZeros = [UInt8]()

bytes.forEach { byte in

var array = [UInt8](count: 8, repeatedValue: 0)

let bits = String(byte, radix: 2).characters.flatMap { UInt8(String($0)) }

array.replaceRange((8-bits.count)..<8, with: bits)
onesAndZeros.appendContentsOf(array)
}

再次,我选择了 UInt8 而不是 Int,只是因为它更有意义,但请根据需要进行更改。

为了使事情变得简单,您可以将这两个操作包装在几个函数中,如下所示:

func bytesFromFile(filePath: String) -> [UInt8]? {

guard let data = NSData(contentsOfFile: filePath) else { return nil }

var buffer = [UInt8](count: data.length, repeatedValue: 0)
data.getBytes(&buffer, length: data.length)

return buffer
}

func bitsFromBytes(bytes: [UInt8]) -> [UInt8] {

var onesAndZeros = [UInt8]()

bytes.forEach { byte in

var array = [UInt8](count: 8, repeatedValue: 0)

let bits = String(byte, radix: 2).characters.flatMap { UInt8(String($0)) }

array.replaceRange((8-bits.count)..<8, with: bits)
onesAndZeros.appendContentsOf(array)
}

return onesAndZeros
}

关于arrays - 如何将文件读入整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662611/

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