2014-10-10 215 views
8

在对象 - 这个代码是用来一个NSData转换为unsigned char无符号的字符:斯威夫特

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

在斯威夫特无符号的字符是所谓叫做CUnsignedChar,但我怎么转换一个NSData对象CUnsignedChar在迅速?

+0

你的Objective-C代码* *分配无符号的字符缓冲区,我看不出它如何* *转换NSData的。也许你可以更好地解释你实际需要达到的目标。 – 2014-10-10 12:52:53

+0

它从commandData的数据是NSData,转换可能是错误的词,但我只需要该数据成为一个无符号字符缓冲区。 – 2014-10-10 12:56:05

+0

我试图从StarIO SDK转换一个Obj-C函数,看起来像这个http://pastebin.com/dBCz2bv0,如果这给你一个我想要做的事情的想法。 – 2014-10-10 13:01:29

回答

12

这可能是你在找什么:

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

更新:其实你并不需要将数据在所有复制(无论在 Objective-C代码也不斯威夫特)。对于数据有一个指针就足够了。 所以,你的代码看起来是这样的(比较 Error ("'()' is not identical to 'UInt8'") writing NSData bytes to NSOutputStream using the write function in Swift 了类似的问题):

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 
    // ... 
}