0

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))

プレイグラウンド ファイルへのリンクはここにあります。Swift で UnsafeMutablePointers を文字列に使用した経験がある場合は、ここ数日進歩が見られないため、ガイダンスをいただければ幸いです。再度、感謝します!

4

1 に答える 1

0

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が失敗する可能性があるため、代わりに使用することも検討する必要があります。

于 2015-08-11T07:22:34.563 に答える