ios - 将 UnsafePointer<UInt8> 获取到 Int 以将编码的 Int 写入流

标签 ios swift

如何获得指向数字变量的指针?例如。转换得到 UnsafePointer<UInt8>指向包含 Swift Int 的存储.我需要写 Int到一个流。

我的例子:

public static func writeToOutputStream(text: String!, outputStream:NSOutputStream!){
    let encodedDataArray = [UInt8](text.utf8)
    //send length of the data so the server knows when the message ends.
    outputStream.write(encodedDataArray.count, maxLength: 4)
    outputStream.write(encodedDataArray, maxLength: encodedDataArray.count)
}

我需要 encodedDataArray.count成为UnsafePointer<UInt8>如果我也想发送数据长度。

最佳答案

使用withUnsafePointer,像这样:

let outputStream = NSOutputStream(toMemory: ())
outputStream.open()

var count: Int = 0x01020304 // = encodedDataArray.count in your program
withUnsafePointer(&count) { (pointer: UnsafePointer<Int>) -> Void in
    outputStream.write(UnsafePointer<UInt8>(pointer), maxLength: 4)
}

outputStream.propertyForKey(NSStreamDataWrittenToMemoryStreamKey)

结果:

<04030201>

请注意,它将以小端顺序写入字节(因为 Swift 当前运行的所有平台都是小端)。如果您想以大端方式写入,请使用 encodedDataArray.count.bigEndian

关于ios - 将 UnsafePointer<UInt8> 获取到 Int 以将编码的 Int 写入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33663360/

相关文章:

ios - 将 React-Native 应用程序集成到 Swift 3

ios - 在我的 Apple Developer 订阅到期后,我的 Apple Wallet Pass 生成器还能工作吗?

swift - 如何在 Swift 中调用 c TIFFGetField 函数?

swift - Swift 中 struct init 的编译器错误

swift - 想要在新行中打印数据

ios - 如何更改 UIAlertController 的 UIAlertAction 处理程序中的全局值(添加函数)?

ios - 组合 UIView 以创建复杂 View 的最佳方法?

iOS 嵌入 View

ios - Swift 3 - UserDefaults 无故自动清除

ios - if-else Swift 之后不需要的 segue