如何将字符串转换为 UnsafePointer<UInt8>和长度 [英] How to convert String to UnsafePointer&lt;UInt8&gt; and length

查看:59
本文介绍了如何将字符串转换为 UnsafePointer<UInt8>和长度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用 NSOutputStreamwrite 方法时

When I using NSOutputStream's write method

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

我不知道如何将 String 转换为 UnsafePointer 和长度

I don't know how to convert String to UnsafePointer<UInt8> and length

我怎样才能快速做到这一点?

How can I do this in swift?

推荐答案

必须先将字符串转换为 UTF-8 数据

You have to convert the string to UTF-8 data first

let string = "foo bar"
let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!

然后将其写入输出流

let outputStream: NSOutputStream = ... // the stream that you want to write to
let bytesWritten = outputStream.write(UnsafePointer(data.bytes), maxLength: data.length)

UnsafePointer() 强制转换是必要的,因为 data.bytes 具有 UnsafePointer 类型,而不是 UnsafePointer<;UInt8> 正如 write() 所预期的那样方法.

The UnsafePointer() cast is necessary because data.bytes has the type UnsafePointer<Void>, and not UnsafePointer<UInt8> as expected by the write() method.

Swift 3 更新:

let string = "foo bar"
// Conversion to UTF-8 data (cannot fail):
let data = string.data(using: String.Encoding.utf8)! 

// Write to output stream:
let outputStream: NSOutputStream = ... // the stream that you want to write to
let bytesWritten = data.withUnsafeBytes { outputStream.write($0, maxLength: data.count) }

这篇关于如何将字符串转换为 UnsafePointer<UInt8>和长度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆