我无法获取一些字节并将它们放入字符串中...... 我正在使用此函数来获取数据。一切都运行良好,但我不能使用函数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))
那么如何一起阅读多个字符?
答案 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"
}