将 Int 转换为 UnsafePointer<UInt8>
Posted
技术标签:
【中文标题】将 Int 转换为 UnsafePointer<UInt8>【英文标题】:Convert Int to UnsafePointer<UInt8> 【发布时间】:2015-09-12 13:50:42 【问题描述】:我正在为 ios 设备上的应用快速创建 TCP 客户端。我正在使用 NSOuputStream 在服务器上发送数据。 我们的协议是 JSON 类型,我们必须先发送 json 的长度(无符号 Int 32 位),然后发送 JSON 内容(作为 UTF8 字符串)。
一切正常,除了我找不到如何使用 NSOutputStream 的 write(_:maxLength:)
函数编写我的 Int ..
要将我的 JSON 字符串转换为 UnsafePointer<UInt8>
,我使用以下代码
//var json: String
let encodedData = [UInt8](json.utf8)
let result = outputStream?.write(encodedData, maxLength: encodedData.count)
有人知道如何为 Int 做到这一点吗?
感谢您的帮助!
【问题讨论】:
【参考方案1】:你应该可以做这样的事情:
var int = 100
let result = withUnsafePointer(&int)
outputStream?.write(UnsafePointer($0), maxLength: sizeof(Int))
编辑:要阅读您的Int
,您可以这样做
func getInt(ptr: UnsafePointer<UInt8>) -> Int
return UnsafePointer(ptr).memory
【讨论】:
太棒了!这正是我所需要的。我怎么能做同样的事情来读取 Int ? @bobby 编辑了我的答案 谢谢!这就是我需要的【参考方案2】:斯威夫特 4:
var int = 100
let result = withUnsafePointer(to: & int)
let unsafePointer8 = $0.withMemoryRebound(to: UInt8.self, capacity: 1, $0)
outputStream?.write(unsafePointer8, maxLength: MemoryLayout<Int64>.size)
【讨论】:
以上是关于将 Int 转换为 UnsafePointer<UInt8>的主要内容,如果未能解决你的问题,请参考以下文章
无法为类型 Unsafepointer Swift 3.0 转换初始化变量
在 Swift 中使用 C 字符串,或者:如何将 UnsafePointer<CChar> 转换为 CString
如何转换 UnsafePointer<UnsafeMutablePointer<Float>>?到 UnsafeMutablePointer<UnsafeMutableP