如何在 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)
我正在查看 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)