को स्ट्रक्चर करने के लिए एनएसडीटा और एनएसडेटा को स्ट्रक्चर करना मैं समझने की कोशिश कर रहा हूं कि स्ट्रिफ्स के भीतर structs कैसे काम करते हैं। मैं के साथ कैसे नेट उन्हें संभालती है और कैसे यह पैक एक संरचना में बाइट्स परिचित हूँ, आदिस्विफ्ट के साथ स्ट्रक्चर (बाइट्स) का उपयोग करना -
मैं निम्नलिखित कोड के साथ कुछ weirdness खोजने हूँ:
struct exampleStruct {
var ModelNumber: Byte!
var MajorVersion: Byte!
var MinorVersion: Byte!
var Revision: Byte!
}
var myStruct = exampleStruct (
ModelNumber: 1,
MajorVersion: 2,
MinorVersion: 3,
Revision: 4
)
myStruct.MinorVersion // << Returns 3
// Struct to NSData.
var data = NSData(
bytes: &myStruct,
length: sizeof(exampleStruct)
)
println("data: \(data)")
println रिटर्न: "डेटा: < 01,000,200 03,000,400> "
मैं वास्तव में होना करने के लिए डेटा उम्मीद कर रहा था:" डेटा: < 01,020,304> "
किसी भी विचार क्यों स्विफ्ट पैकिंग नहीं है 1 के रूप में बाइट 1 बाइट, बजाय यह 2 बाइट्स के रूप में एक बाइट पैकिंग है (1 बाइट मूल्य और 1 बाइट के रूप में 00)?
दूसरा पहलू अगर मैं निम्न कार्य पर:
var newStruct = exampleStruct(ModelNumber: nil, MajorVersion: nil, MinorVersion: nil, Revision: nil)
var sendBytes:[Byte] = [0x1, 0x2, 0x3, 0x4]
var newData = NSData(bytes: sendBytes, length: sendBytes.count)
newData.getBytes(
&newStruct,
length: sizeof(exampleStruct)
)
newStruct.MinorVersion // << Returns nil
println(newData)
println (newData) सही है और मैं मूल्य में क्या उम्मीद: < 01,020,304>
हालांकि, जब मैं minorVersion इसे उपयोग शून्य लौटाता है, जो मुझे अपेक्षित नहीं था 3.
क्या बाइट के पैकिंग का सम्मान करने के लिए संरचना को मजबूर करने का कोई तरीका है?
धन्यवाद! यह काम करता है और स्पष्टीकरण के लिए धन्यवाद, यह समझ में आता है। – Mavro