2014-10-10 14 views
8

W Obj-C kod ten jest używany do konwersji NSData do unsigned char:unsigned char w Swift

unsigned char *dataToSentToPrinter = (unsigned char *)malloc(commandSize); 

W Swift unsigned char jest podobno nazywa CUnsignedChar, ale jak mogę konwertować obiekt NSData do CUnsignedChar w Szybki?

+0

Twój kod Objective-C * przydziela * unsigned char bufor, nie mogę zobaczyć, jak to konwertuje * * NSData. Być może lepiej wyjaśnisz, co naprawdę musisz osiągnąć. –

+0

Pobiera dane z commandSize, które jest NSData, konwersja może być niewłaściwym słowem, ale po prostu potrzebuję, aby dane stały się niepodpisanym buforem znaków. –

+0

Próbuję przekonwertować funkcję Obj-C z pakietu SDK StarIO, który wygląda tak: http://pastebin.com/dBCz2bv0, jeśli to daje wyobrażenie o tym, co próbuję zrobić. –

Odpowiedz

12

To może być to, czego szukasz:

let commandsToPrint: NSData = ... 

// Create char array with the required size: 
var dataToSentToPrinter = [CUnsignedChar](count: commandsToPrint.length, repeatedValue: 0) 

// Fill with bytes from NSData object: 
commandsToPrint.getBytes(&dataToSentToPrinter, length: sizeofValue(dataToSentToPrinter)) 

Aktualizacja: Właściwie nie trzeba skopiować dane w ogóle (ani w kodzie Objective-C, ani w Swift). Wystarczy mieć wskaźnik dla danych. Więc twój kod mógłby wyglądać następująco (por Error ("'()' is not identical to 'UInt8'") writing NSData bytes to NSOutputStream using the write function in Swift dla podobnego problemu):

let dataToSentToPrinter = UnsafePointer<CUnsignedChar>(commandsToPrint.bytes) 
let commandSize = commandsToPrint.length 
var totalAmountWritten = 0 

while totalAmountWritten < commandSize { 
    let remaining = commandSize - totalAmountWritten 
    let amountWritten = starPort.writePort(dataToSentToPrinter, totalAmountWritten, remaining) 
    totalAmountWritten += amountWritten 
    // ... 
}