【问题标题】:Encoding and Decoding Strings using UnsafeMutablePointer in Swift在 Swift 中使用 UnsafeMutablePointer 编码和解码字符串
【发布时间】:2015-08-11 07:05:17
【问题描述】:

我在将字符串与 UnsafeMutablePointers 相互转换时遇到问题。以下代码不起作用,返回错误的字符串。

// func rfcommChannelData(rfcommChannel: IOBluetoothRFCOMMChannel!, data dataPointer: UnsafeMutablePointer<Void>, length dataLength: Int)
func receivingData(data dataPointer: UnsafeMutablePointer<Void>, length dataLength: Int) {
    let data = NSData(bytes: dataPointer, length: dataLength)
    println("str = \(NSString(data: data, encoding: NSASCIIStringEncoding))")
}

// - (IOReturn)writeSync:(void *)data length:(UInt16)length;
func sendingData(data: UnsafeMutablePointer<Void>, length: UInt16) {
    receivingData(data: data, length: Int(length))
}


var str: NSString = "Hello, playground"
var data = str.dataUsingEncoding(NSASCIIStringEncoding)!
var bytes = data.bytes

sendingData(&bytes, UInt16(data.length))

游乐场文件的链接是here。如果有人有在 Swift 中使用 UnsafeMutablePointers 处理字符串的经验,我将非常感谢一些指导,因为我在过去几天没有取得任何进展。再次感谢!

【问题讨论】:

    标签: swift cocoa nsstring nsstringencoding iobluetooth


    【解决方案1】:

    var bytes = data.bytes
    sendingData(&bytes, UInt16(data.length))
    

    您将变量bytes 本身的地址传递给函数,因此您看到的是用于表示该指针的字节。

    你可能想要的是

    let str = "Hello, playground"
    let data = str.dataUsingEncoding(NSASCIIStringEncoding)!
    sendingData(UnsafeMutablePointer(data.bytes), UInt16(data.length))
    

    将指针传递给数据字节。

    您还应该考虑 改为使用NSUTF8StringEncoding,因为转换为 NSASCIIStringEncoding 可能会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2019-03-06
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多