попробовать что-то вроде этого:
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
s, каждый из которых представляет собой байт из файла.
EDIT: И если вы действительно хотите, чтобы это массив Int
с вместо UInt8
с, просто map
bytes
на массив Int
с:
let intBytes = bytes.map { Int($0) }
... хотя, вообще говоря, это не ясно, почему вы хотите работать с чем угодно, кроме набора байтов, которые наиболее предпочтительно представлены в виде серии 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)
}
Опять же, я пошел с 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
}
Одним из требований, предъявляемых к публикации надлежащего вопроса о SO является то, что вы предоставите ваши лучшие попытки в коде , Не могли бы вы обновить код? Кроме того, просмотрите [ask]. –
это помогает? http://stackoverflow.com/questions/24581517/read-a-file-url-line-by-line-in-swift –
Вы хотите массив из 1s и 0s или массив байтов? –