在swift中读取二进制文件

在swift中读取二进制文件,swift,Swift,Xcode版本11.0(11A420a) var byteArray:[UInt8]=[] 做{ 让数据:NSData=尝试NSData(内容文件:路径) 打印(“数据长度:+字符串(数据长度)) 变量缓冲区=[UInt8]( 未初始化容量:data.length, 初始化为:{uu,{uin} ) 打印(“缓冲区长度:+字符串(Buffer.count)) data.getBytes(&缓冲区,长度:data.length) byteArray=缓冲区 打印(“数组长度:+字符串(byteAr

Xcode版本11.0(11A420a)

var byteArray:[UInt8]=[]
做{
让数据:NSData=尝试NSData(内容文件:路径)
打印(“数据长度:+字符串(数据长度))
变量缓冲区=[UInt8](
未初始化容量:data.length,
初始化为:{uu,{uin}
)
打印(“缓冲区长度:+字符串(Buffer.count))
data.getBytes(&缓冲区,长度:data.length)
byteArray=缓冲区
打印(“数组长度:+字符串(byteArray.count))
}抓住{
打印(“加载错误”)
addChild(ErrorViewController())
返回
}
这不会出错,但会返回长度为0的结果。打印输出为:

数据长度:3020

缓冲区长度:0

数组长度:0

我做错了什么?

这个

var buffer = [UInt8](
    unsafeUninitializedCapacity: data.length,
    initializingWith: {_,_ in}
)
不执行任何操作,因为闭包不执行任何操作(它应该初始化第一个闭包参数指向的元素存储,然后设置第二个闭包参数initializedCount)。还有这个

data.getBytes(&buffer, length: data.length)
由于
缓冲区
为空,因此不执行任何操作

话虽如此,您只需使用

let data = try NSData(contentsOfFile: path) as Data
// or better:
let data = try Data(contentsOf: URL(fileURLWithPath: path))
然后使用
数据
值。如果确实需要将数据复制到阵列中,则可以使用

let byteArray = Array(data)