How to convert String to UnsafePointer and length

前端 未结 9 1095
萌比男神i
萌比男神i 2020-12-09 16:13

When I using NSOutputStream\'s write method

func write(_ buffer: UnsafePointer, maxLength length: Int) -> Int
         


        
9条回答
  •  执笔经年
    2020-12-09 16:25

    Here is how to do it in Swift 3. Run fine in Swift 4 too

    extension String {
    
      func toPointer() -> UnsafePointer? {
        guard let data = self.data(using: String.Encoding.utf8) else { return nil }
    
        let buffer = UnsafeMutablePointer.allocate(capacity: data.count)
        let stream = OutputStream(toBuffer: buffer, capacity: data.count)
    
        stream.open()
        data.withUnsafeBytes({ (p: UnsafePointer) -> Void in
          stream.write(p, maxLength: data.count)
        })
    
        stream.close()
    
        return UnsafePointer(buffer)
      }
    }
    

    To convert from String to UnsafeMutablePointer

    let cString = strdup("Hello") // UnsafeMutablePointer
    

    To convert from UnsafeMutablePointer to String

    let string = String(cString: cString!) // String
    

提交回复
热议问题