2014-10-10 7 views
8

Obj सी में इस कोड अहस्ताक्षरित चार के लिए एक NSData कन्वर्ट करने के लिए प्रयोग किया जाता है:अहस्ताक्षरित चार स्विफ्ट

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

स्विफ्ट अहस्ताक्षरित चार में माना जाता है कि CUnsignedChar कहा जाता है, लेकिन मैं कैसे CUnsignedChar के लिए एक NSData वस्तु परिवर्तित में स्विफ्ट?

+0

आपका ऑब्जेक्टिव-सी कोड * आवंटित * ​​एक अहस्ताक्षरित चार बफर, मैं नहीं देख सकते हैं कि यह कैसे * धर्मान्तरित * NSData। शायद आप बेहतर व्याख्या कर सकते हैं कि आपको वास्तव में क्या हासिल करने की आवश्यकता है। –

+0

यह कमांडसाइज से डेटा लेता है जो एनएसडीटा है, कनवर्ट गलत शब्द हो सकता है, लेकिन मुझे बस उस डेटा को एक हस्ताक्षरित चार बफर बनने की आवश्यकता है। –

+0

मैं स्टारियो एसडीके से ओब्जे-सी फ़ंक्शन को कन्वर्ट करने की कोशिश कर रहा हूं जो इस http://pastebin.com/dBCz2bv0 जैसा दिखता है, अगर यह आपको एक ऐसा विचार देता है जो मैं करने की कोशिश कर रहा हूं। –

उत्तर

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

अपडेट: (न ऑब्जेक्टिव-सी कोड में है और न ही में स्विफ्ट) वास्तव में आप सब पर डेटा की प्रतिलिपि बनाने की जरूरत नहीं है। डेटा में पॉइंटर होने के लिए पर्याप्त है। तो अपने कोड (तुलना एक ऐसी ही समस्या के लिए 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 
    // ... 
} 
संबंधित मुद्दे