如何将字符串转换为 UnsafePointer<UInt8>和长度 [英] How to convert String to UnsafePointer<UInt8> and length
本文介绍了如何将字符串转换为 UnsafePointer<UInt8>和长度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我使用 NSOutputStream
的 write
方法时
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屋!
查看全文