2015-08-11 1 views
0

У меня возникли проблемы с преобразованием строк в UnsafeMutablePointers и из него. Следующий код не работает, возвращая неправильную строку.Строки кодирования и декодирования с использованием UnsafeMutablePointer в Swift

// 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. Если у кого-то есть опыт использования UnsafeMutablePointers в Swift для строк, я бы очень признателен за некоторые рекомендации, поскольку за последние несколько дней я не добился прогресса. Еще раз спасибо!

ответ

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 может потерпеть неудачу.

+0

Большое вам спасибо! Это сработало отлично! – user2844801

Смежные вопросы