2016-04-08 13 views
-3

Also sagen wir, ich habe eine Klasse foo mit 10 Eigenschaften, die alle vom Typ String sind, und ich möchte ein Byte-Array der Länge 10 wie folgt erstellen:Erstellen Sie ein Byte-Array in Swift 2.2 mit einem Objekt mit String-Eigenschaften

let data = NSData(bytes: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,] as [UInt8], length:10) 

Jede Instanz von 0x00 wäre eine Eigenschaft der Klasse foo. Wie würde ich das schaffen?

class foo { 
var mailbox = "0x00" 
var cmd = "0x00" 
var data0 = "0x00" 
var data1 = "0x00" 
var data2 = "0x00" 
var data3 = "0x00" 
var data4 = "0x00" 
var data5 = "0x00" 
var data6 = "0x00" 
var data7 = "0x00" 

}

Dann würde der Byte-Array enthalten:

let data = NSData(bytes:[foo.mailbox, foo.cmd, foo.data0, foo.data1, foo.data2, foo.data3, foo.data4, foo.data5, foo.data6, foo.data7] as [UInt8], length:10) 
+0

Ich verstehe nicht, was Sie fragen. Sie möchten die Bytes eines NSData-Objekts in einzelne Eigenschaften aufteilen? Wird es immer genau 10 Bytes geben? Und was haben die Bytes mit den Strings zu tun? Warum willst du das machen? Scheint wie eine unangenehme Art, mit Bytes umzugehen. –

+0

Nein Ich möchte genau das Gegenteil tun und ein NSData-Objekt aus den Eigenschaften erstellen. Die Eigenschaften haben das Format eines Strings und müssen in Bytes konvertiert werden. – Jonathan

+0

Und wie würden Sie eine Zeichenfolge zu einem einzelnen Byte zuordnen? Wird jede Zeichenfolge nur ein einzelnes ASCII-Zeichen enthalten? Sei klar, Mann! Der erste Schritt bei der Ermittlung eines Programmierproblems ist eine klare, detaillierte und konkrete Beschreibung dessen, was Sie tun müssen. –

Antwort

0

Ich löse dies durch die "0x" von den String-Eigenschaften zu entfernen und den String in einem Int Umwandlung nach einem Hex tun zur Dezimalwandlung. Dann habe ich es einfach in ein UInt8 für mein Byte-Array konvertiert.

let mailbox = Int(converttoDec(foo.mailbox.stringByReplacingOccurrencesOfString("0x", withString: "")) 

let data = NSData(bytes:[UInt8(mailbox!), UInt8(command!), UInt8(data0!), UInt8(data1!), UInt8(data2!), UInt8(data3!), UInt8(data4!), UInt8(data5!), UInt8(data6!), UInt8(data7!),] as [UInt8], length:10)