来自NSData的getBytes并将结果放在一个字符串中

时间:2017-02-14 14:01:01

标签: swift cocoa buffer nsdata

我无法获取一些字节并将它们放入字符串中...... 我正在使用此函数来获取数据。一切都运行良好,但我不能使用函数getBytes的字符串类型的缓冲区,因为它将导致一个空字符串,即使数据不为空。

private func getTYPE() {
    let x = NSMutableData(contentsOf: URL(fileURLWithPath: path))
    let _mode_: [UInt8] = [0x66, 0x74, 0x79, 0x70]
    let data = NSData(bytes: _mode_, length: _mode_.count)
    let range = x?.range(of: data as Data, in: NSRange(location: 0, length: (x?.length)!))

    // Problems here
    var y: String = ""
    x?.getBytes(&y, range: NSRange(location: (range?.location)! + (range?.length)!, length: 3))
    Swift.print(y) // Print result
}

它不会抛出任何异常,但字符串始终为空... 如果我尝试只获取一个UInt8而不是字符串,那么相同的功能也可以正常工作:

// Working Context
var y: UInt8 = 0
x?.getBytes(&y, range: NSRange(location: (range?.location)! + (range?.length)!, length: 1))

那么如何一起阅读多个字符?

1 个答案:

答案 0 :(得分:2)

这是非Swift!大概你是从一些旧的Obj-C代码或其他一些代码转换而来的。

正如您所知,您可以将指针传递给UInt8以获取一个字节。如果你想要几个字节,请使用UInt8的数组,但如果你想要一个字符串,只需使用var s = String(data: ...)

请参阅下面的示例(为了清晰起见,我已删除了范围内容):

let x: NSMutableData = "A test string".data(using: .utf8) as! NSMutableData

var y: [UInt8] = [0,0,0]
x.getBytes(&y, range: NSRange(location: 0, length: 3))
y // [65, 32, 116]

if let s = String(data: x as Data, encoding: .utf8) {
    s // "A test string"
}