如何在 UnsafeMutablePointer 上进行指针运算并在 Swift 中获取字符串 3

How to do pointer arithmetic on UnsafeMutablePointer and get String in Swift 3

我正在查看 Objective-C 中的这一行:

NSString * str = [[NSString alloc] initWithBytes:data + 1 length:length - 1 encoding:NSASCIIStringEncoding];

其中变量数据的类型为'UnsafeMutableRawPointer?'。

我将该行转换为 Swift 3 的尝试如下:

let next = data + 1
let dataPtr = next.bindMemory(to: String.self, capacity: Int(length - 1))
let barcode = dataPtr.pointee

但是,我遇到了 EXC_BAD_ACCESS 异常。

您必须将原始指针绑定到 UInt8 指针:

let bytes = (data + 1).bindMemory(to: UInt8.self, capacity: length - 1)

现在您可以创建一个 缓冲区指针 来引用该字节范围

let buffer = UnsafeBufferPointer(start: bytes, count: length - 1)

哪个(作为 Sequence)可以传递给

let str = String(bytes: buffer, encoding: .ascii)